Matrice, décalage de colonne dans une liste de liste - PYTHON
Bonjour, j'ai une question par rapport à une matrice
qui est sous cette forme :
Code:
1 2 3 4 5 6 7
| res = []
for i in range(nb_lignes):
liste = []
for j in range(nb_colonnes):
liste.append(valeur_par_defaut)
res.append(liste)
return res |
ca donne quelque chose comme ca :
Code:
1 2 3
| [[0, 1, 2],
[3, 4, 5],
[6, 7, 8]] |
et le but de l'exercice est de faire la fonction ci dessous (décalage_colonne_en_haut) , c'est a dire de décaler une colonne en récupérant le nombre qui est enlevé et rajouter une nouvelle valeur (par ex: 9) en bas de la colonne.
Donc la matrice
Code:
1 2 3
| [[0, 1, 2],
[3, 4, 5],
[6, 7, 8]] |
en insérant une nouvelle valeur 9 a la colonne 1 doit donner ceci :
Code:
1 2 3
| [[0, 4, 2],
[3, 7, 5],
[6, 9, 8]] |
en retournant a la fin de la fonction la valeur qui a été enlevé ici c'est le nombre 1.
Code:
1 2 3 4 5 6 7 8 9 10
| def decalage_colonne_en_haut(matrice, num_colonne, nouvelle_valeur=0):
"""
decale la colonne num_colonne d'une case vers le haut en insérant une nouvelle
valeur pour remplacer la premiere case en bas de cette ligne
:param matrice: la matrice considérée
:param num_colonne: le numéro de la ligne à décaler
:param nouvelle_valeur: la valeur à placer
:return: la valeur qui a été ejectée lors du décalage
""" |
J'ai fait quelque chose comme ca mais ca ne fonctionne pas :
Code:
1 2 3 4
| retire avec .pop le premiere element colonne et rajouter a la derniere ligne la new val a la colonne
nb_retire = matrice[0].pop(num_colonne)
matrice[-1].append(nouvelle_valeur)
return nb_retire |
Ou aussi j'ai fait ca :
Code:
1 2 3 4 5 6 7
| for i in range(len(matrice)-1):
nb_ret = matrice[0][num_colonne]
matrice[i].pop(num_colonne)
matrice[i].insert(num_colonne,matrice[i+1][num_colonne])
matrice[-1][num_colonne] = nouvelle_valeur
return nb_ret |
JE vous remercie de votre aide, certaines personnes m'on parlé de boucle imbriquée mais si vous avez une solution plus simple je suis preneur.
Merci :D:D