1177 votes

Comment inverser une liste ?

Comment itérer sur une liste en sens inverse en Python ?

array = [0, 10, 20, 40]
for (i = array.length() - 1; i >= 0; i--)

0 votes

Ou plutôt "Comment inverser une liste pré-triée ?" (une question correcte compte tenu de ce cas d'essai spécial qui a fait dérailler la plupart des réponses :)

1486voto

codaddict Points 154968

Utilisez le reversed fonction :

>>> xs = [0, 10, 20, 40]
>>> for i in reversed(xs):
...     print(i)

Pour obtenir une liste inversée :

>>> list(reversed(xs))
[40, 20, 10, 0]

241 votes

Ne pouvez-vous pas simplement utiliser : array[::-1] ?

157 votes

@kdlannoy Selon la page dont le lien figure dans la réponse, " Par rapport au découpage étendu, tel que range(1,4)[::-1], reversed() est plus facile à lire, s'exécute plus rapidement et utilise nettement moins de mémoire. "

6 votes

Lorsque je l'ai testé, le découpage était environ deux fois plus rapide (en inversant une liste de 10 000 éléments et en créant une liste à partir de celle-ci). Je n'ai pas testé la consommation de mémoire cependant. reverse pourrait être plus rapide cependant, si vous n'avez pas besoin de lancer vers la liste ensuite.

1388voto

bernie Points 44206
>>> xs = [0, 10, 20, 40]
>>> xs[::-1]
[40, 20, 10, 0]

La syntaxe des tranches étendues est expliquée aquí . Voir aussi, documentation .

0 votes

Par curiosité, quels avantages (s'il y en a) cela présente-t-il par rapport à list.reverse() ?

13 votes

Cela fonctionne pour tout interable, pas seulement pour les listes. L'inconvénient est qu'il n'est pas en place.

7 votes

@Tim il retourne une tranche, donc ne change pas le contenu réel de la liste.

412voto

ghostdog74 Points 86060
>>> L = [0,10,20,40]
>>> L.reverse()
>>> L
[40, 20, 10, 0]

Ou

>>> L[::-1]
[40, 20, 10, 0]

69 votes

[start:stop:step] donc step est -1

43 votes

Détail : La première modifie la liste en place, la seconde renvoie juste une nouvelle liste inversée, mais elle ne modifie pas la liste originale.

7 votes

Le deuxième exemple devrait être L=L[::-1] pour inverser la liste, sinon vous ne retournerez que les valeurs inversées.

16voto

Swiss Points 2952
for x in array[::-1]:
    do stuff

0 votes

Cette méthode de découpage n'est pas très lisible. La méthode Pythonique serait d'utiliser la méthode reverse() ;-)

0 votes

@SimonM reverse() est définitivement plus facile à comprendre au premier coup d'œil.

9voto

動靜能量 Points 33008
array=[0,10,20,40]
for e in reversed(array):
  print e

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X