Ajout d'une colonne contenant le nombre de 1 par ligne⚓︎
On dispose d'un tableau non vide ne contenant que des 0
et des 1
et on
voudrait lui rajouter une colonne à droite ou figurent les totaux par ligne.
Par exemple, le tableau :
sera représenté sur machine par la liste de listes suivante :
>>> tab1 = [
... [0, 1, 1, 1, 0, 1],
... [0, 0, 1, 0, 0, 1],
... [1, 0, 0, 1, 1, 0],
... [1, 0, 0, 1, 1, 1],
... ]
et deviendra :
Vous coderez une fonction ajoute_bord(tab)
qui modifie le paramètre tab
en
lui ajoutant la colonne décrite précédemment :
Exemples
>>> tab1 = [
... [0, 1, 1, 1, 0, 1],
... [0, 0, 1, 0, 0, 1],
... [1, 0, 0, 1, 1, 0],
... [1, 0, 0, 1, 1, 1],
... ]
>>> ajoute_bord(tab1)
>>> tab2 = [
... [0, 1, 1, 1, 0, 1, 4],
... [0, 0, 1, 0, 0, 1, 2],
... [1, 0, 0, 1, 1, 0, 3],
... [1, 0, 0, 1, 1, 1, 4],
... ]
>>> tab1 == tab2
True
def ajoutepy-undbord(tab):bksl-nl passbksl-nlbksl-nlbksl-nltab1 = [bksl-nl [0, 1, 1, 1, 0, 1],bksl-nl [0, 0, 1, 0, 0, 1],bksl-nl [1, 0, 0, 1, 1, 0],bksl-nl [1, 0, 0, 1, 1, 1]bksl-nl ]bksl-nlbksl-nlajoutepy-undbord(tab1)bksl-nlbksl-nltab1py-undattendu = [bksl-nl [0, 1, 1, 1, 0, 1, 4],bksl-nl [0, 0, 1, 0, 0, 1, 2],bksl-nl [1, 0, 0, 1, 1, 0, 3],bksl-nl [1, 0, 0, 1, 1, 1, 4],bksl-nl]bksl-nlbksl-nlassert tab1 == tab1py-undattendubksl-nlbksl-nldef ajoutepy-undbord(tab):bksl-nl nbpy-undl, nbpy-undc = len(tab), len(tab[0])bksl-nl for i in range(nbpy-undl):bksl-nl sompy-undi = 0bksl-nl for j in range(nbpy-undc):bksl-nl sompy-undi += tab[i][j]bksl-nl tab[i].append(sompy-undi)bksl-nlbksl-nltab1 = [bksl-nl [0, 1, 1, 1, 0, 1],bksl-nl [0, 0, 1, 0, 0, 1],bksl-nl [1, 0, 0, 1, 1, 0],bksl-nl [1, 0, 0, 1, 1, 1]bksl-nl ]bksl-nlbksl-nlbksl-nltab2 = [bksl-nl [0, 0, 0],bksl-nl [0, 0, 0]bksl-nl ]bksl-nlbksl-nlajoutepy-undbord(tab1)bksl-nlbksl-nlassert tab1 == [[0, 1, 1, 1, 0, 1, 4],bksl-nl [0, 0, 1, 0, 0, 1, 2],bksl-nl [1, 0, 0, 1, 1, 0, 3],bksl-nl [1, 0, 0, 1, 1, 1, 4]]bksl-nlbksl-nlajoutepy-undbord(tab2)bksl-nlbksl-nlassert tab2 == [[0, 0, 0, 0], [0, 0, 0, 0]]bksl-nlbksl-nl
A
Pas forcément simple.
Variantes :
- on renvoie le plus petit numéro de colonne contenant le maximum de 1
def max_col(tab):
maxc = 0
for j in range(len(tab[0])):
somj = 0
for i in range(len(tab)):
somj += tab[i][j]
if somj > maxc:
maxc = somj
return maxc
- même exo mais avec la recherche des numéros de ligne
def max_row(tab):
maxr = 0
inds_maxr = []
for i in range(len(tab)):
somi = 0
for j in range(len(tab[0])):
somi += tab[i][j]
if somi > maxc:
inds_maxr = [i]
maxr = somi
elif somi > 0 and somi == maxr:
inds_maxc.append(i)
return inds_maxr
- on demande plutôt de rajouter une ligne avec le nombre de 1 par colonnes
def bord_row(tab):
new_tab = tab[:]
new_tab.append([0 for _ in range(len(new_tab[0]))])
for j in range(len(tab[0])):
somj = 0
for i in range(len(tab)):
somj += tab[i][j]
new_tab[len(tab)][j] = somj
return new_tab
Z