Bonsoir,
Le but est de faire une rotation de 90 degree vers la droite d'une image. Cette image est mise sous forme d'une matric de triplet.
Mon probleme avec mon code est que il me renvoie:
L'exemple de matrice que j'utilise est racourcis, elle doit marcher avec n importe quelle longeure de matrice.
Voici mon code avec la matrice que j'utilise:
def ROTD(the_matrix):
res = []
res2 = []
index = 0
counter = 0
while counter <= len(the_matrix):
res = []
index = 0
for line in the_matrix:
res.append(line[index])
index += 1
res2.append(res)
return res2
print res2
the_matrix= [[['2', '2', '2'], ['1', '1', '1'], ['0', '0', '0']], [['3', '3', '3'], ['4', '4', '4'], ['5', '5', '5'] ]]
Merci pour tout information que vous puissiez me donner.
tu n'as juste droit qu'aux foncions built-in ?
admettons ... documentes-toi sur les méthodes des listes, le slicing et zip().
sinon dans l'idée ta méthode n'est pas fausse, mais la variable counter toujours égale à zéro ne sert à rien
zip() me renvoie un tuple, ce que je ne veux pas, je veux que des listes. Et je ne vois pas comment la methode slice me permet d 'atteindre ce que je veux =S
Comme tu as eu le mérite de chercher et de poster un bout de code, voici :
J'y ai effectué quelques modifications :
def ROTD_ME(tab):
largeur =len(tab[0])
res2 = []
index = 0
while index<largeur:
res = []
for line in tab:
res.append(line[index])
res.reverse() #Si on n'applique pas cette ligne, on obtient une transposée de matrice au lieu d'une rotation
res2.append(res)
index +=1
return res2
Autre proposition :
def rotation(tab):
""" """
#Récupération des dimensions de la liste originale:
hauteur = len(tab)
largeur = len(tab[0])
#Forme de la matrice finale:
tab_rot = [[0 for i in range(hauteur)] for j in range(largeur)]
#Remplissage de la matrice finale:
for y, ligne in enumerate(tab):
for x, colonne in enumerate(ligne):
#tab_rot[largeur-x-1][y]=tab[y][x] #Sens trigo
tab_rot[x][hauteur-y-1]=tab[y][x] #Sens non trigo
return tab_rot
zip() me renvoie un tuple, ce que je ne veux pas, je veux que des listes. Et je ne vois pas comment la methode slice me permet d 'atteindre ce que je veux =S
def ROTD(the_matrix):
return [list(i) for i in zip(*the_matrix)]
the_matrix= [[['2', '2', '2'], ['1', '1', '1'], ['0', '0', '0']], [['3', '3', '3'], ['4', '4', '4'], ['5', '5', '5'] ]]
print ROTD(the_matrix)
@josmiley :
Fonction intéressante, mais dans ce cas, le résultat reste une transposition de la matrice plutôt qu'une rotation.
Par contre, je serai assez intéresse par la notation *liste que tu as utilisé.
D'après ce que j'ai compris
zip(listeA, listeB, ...] #Vu dans une doc
zip(*listeZ) #Vu dans ton exemple, liste Z contenant elle même des listes
Et quelques tests plus tard, je conclus que *liste fait référence à toutes les sous-listes d'une liste pour les paramètre de cette fonction.
Tu peux m'en dire plus à ce sujet, ou me suggérer une doc?
C'est une notation que j'ai l'impression avoir déjà vu quelque part en Python (je ne parle pas des pointeurs du langage C).
@pyr0technicien :
Qu'entends-tu par unif?
EDIT :Aux temps pour moi, tout me parait clair.
*liste, c'est "la liste des arguments passés à la fonction".
Si tu écris def ma_fonction(*args), dans le corps de la fonction, la liste "args" représentera la liste des arguments que tu as passés à la fonction. Par exemple, si tu appelles ma_fonction(1, 2, 3), args vaudra [1, 2, 3].
Si tu écris ma_fonction(*args), la fonction ma_fonction sera appelée avec les paramètres contenus dans la liste "args". Par exemple, ma_fonction(*[1, 2, 3]) est la même chose que ma_fonction(1, 2, 3).
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.