Question Comment puis-je inverser une liste en Python?


Comment puis-je faire ce qui suit en Python?

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

J'ai besoin d'avoir les éléments d'un tableau, mais de la fin au début.


733
2017-10-15 06:59


origine


Réponses:


Vous pouvez utiliser le reversed fonction pour cela comme:

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

Notez que reversed(...) ne retourne pas une liste. Vous pouvez obtenir une liste inversée en utilisant list(reversed(array)).


924
2017-10-15 07:02



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

La syntaxe de tranche étendue est bien expliquée dans le Python Quoi de neuf Entrée pour la libération 2.3.5

Par demande spéciale dans un commentaire c'est la documentation la plus récente.


1020
2017-10-15 07:01



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

Ou

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

292
2017-10-15 07:03



C'est pour dupliquer la liste:

L = [0,10,20,40]
p = L[::-1]  #  Here p will be having reversed list

C'est pour inverser la liste sur place:

L.reverse() # Here L will be reversed in-place (no new list made)

38
2018-03-09 07:36



Je pense que la meilleure façon d'inverser une liste en Python est de faire:

a = [1,2,3,4]
a = a[::-1]
print(a)
>>> [4,3,2,1]

Le travail est terminé, et maintenant vous avez une liste inversée.


23
2017-09-21 15:52



Pour inverser la même liste, utilisez:

array.reverse()

Pour affecter une liste inversée à une autre liste, utilisez:

newArray = array[::-1] 

22
2017-11-20 16:12



En utilisant le découpage en tranches, par ex. array = array [:: - 1], est un truc sympa et très Pythonic, mais un peu obscur pour les débutants peut-être. L'utilisation de la méthode reverse () est un bon moyen d'effectuer le codage au jour le jour car il est facilement lisible.

Cependant, si vous devez inverser une liste comme dans une question d'entrevue, vous ne pourrez probablement pas utiliser des méthodes intégrées comme celles-ci. L'interviewer examinera comment vous abordez le problème plutôt que la profondeur de la connaissance de Python, une approche algorithmique est nécessaire. L'exemple suivant, en utilisant un échange classique, pourrait être une façon de le faire: -

def reverse_in_place(lst):      # Declare a function
    size = len(lst)             # Get the length of the sequence
    hiindex = size - 1
    its = size/2                # Number of iterations required
    for i in xrange(0, its):    # i is the low index pointer
        temp = lst[hiindex]     # Perform a classic swap
        lst[hiindex] = lst[i]
        lst[i] = temp
        hiindex -= 1            # Decrement the high index pointer
    print "Done!"

# Now test it!!
array = [2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]

print array                    # Print the original sequence
reverse_in_place(array)        # Call the function passing the list
print array                    # Print reversed list


**The result:**
[2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]
Done!
[654, 124, 24, 7, 1, 65, 60, 32, 27, 25, 19, 12, 9, 8, 5, 2]

Notez que cela ne fonctionnera pas sur les suites de tuples ou de chaînes, car les chaînes et les tuples sont immuables, c'est-à-dire que vous ne pouvez pas écrire dedans pour changer des éléments.


18
2018-02-25 14:51



for x in array[::-1]:
    do stuff

16
2017-10-15 07:01



Je trouve (contrairement à d'autres suggestions) que l.reverse() est de loin le moyen le plus rapide d'inverser une longue liste dans Python 3 et 2. Je serais intéressé de savoir si d'autres peuvent répliquer ces timings.

l[::-1] est probablement plus lent car il copie la liste avant de l'inverser. Ajouter le list() appeler autour de l'itérateur faite par reversed(l) doit ajouter un peu de frais généraux. Bien sûr, si vous voulez une copie de la liste ou un itérateur, alors utilisez ces méthodes respectives, mais si vous voulez simplement inverser la liste, alors l.reverse() semble être le moyen le plus rapide.

Les fonctions

def rev_list1(l):
    return l[::-1]

def rev_list2(l):
    return list(reversed(l))

def rev_list3(l):
    l.reverse()
    return l

liste

l = list(range(1000000))

Python 3.5 horaires

timeit(lambda: rev_list1(l), number=1000)
# 6.48
timeit(lambda: rev_list2(l), number=1000)
# 7.13
timeit(lambda: rev_list3(l), number=1000)
# 0.44

Python 2.7 timings

timeit(lambda: rev_list1(l), number=1000)
# 6.76
timeit(lambda: rev_list2(l), number=1000)
# 9.18
timeit(lambda: rev_list3(l), number=1000)
# 0.46

15
2017-10-27 22:02



Moyens possibles,

list1 = [3,4,3,545,6,4,34,243]

list1.reverse()

list1[::-1]

11
2018-01-10 13:02



array=[0,10,20,40]
for e in reversed(array):
  print e

10
2017-10-15 07:03