web-dev-qa-db-fra.com

Comment puis-je inverser une liste en Python?

Comment puis-je effectuer les opérations suivantes 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.

913
Leo.peis

Vous pouvez utiliser la fonction reversed comme ceci:

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

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

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

La syntaxe de tranche étendue est bien expliquée dans le Python Nouvelle entrée pour la version 2.3.5

Par demande spéciale dans un commentaire il s'agit de la documentation de tranche la plus récente .

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

Ou

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

Ceci est pour dupliquer la liste:

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

Ceci est pour inverser la liste en place:

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

Je pense que le meilleur moyen de renverser une liste dans Python est de faire:

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

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

44
prossellob

Pour inverser la même liste, utilisez:

array.reverse()

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

newArray = array[::-1] 
25
Pawan Kumar

Utilisation de la découpe, par exemple array = array [:: - 1], est une astuce soignée et très pythonique, mais peut-être un peu obscure pour les débutants. L'utilisation de la méthode reverse () est un bon moyen de coder au jour le jour, car elle est facilement lisible.

Toutefois, si vous devez inverser une liste en place comme dans une question d’entrevue, vous ne pourrez probablement pas utiliser de méthodes intégrées telles que celles-ci. L'intervieweur examinera la façon dont vous abordez le problème plutôt que la profondeur de la connaissancePython, une approche algorithmique est nécessaire. L’exemple suivant, qui utilise un échange classique, pourrait constituer un moyen 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 nuplets ou les séquences de chaînes, car les chaînes et les nuplets sont immuables, c’est-à-dire que vous ne pouvez pas y écrire pour modifier des éléments.

23
SimonM

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. J'aimerais savoir si d'autres personnes peuvent les reproduire. les horaires.

l[::-1] est probablement plus lent car il copie la liste avant de l'inverser. Ajouter l'appel list() autour de l'itérateur effectué par reversed(l) doit ajouter une surcharge. Bien sûr, si vous voulez une copie de la liste ou un itérateur, 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 timings

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

Timings Python 2.7

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
17
Chris_Rands
for x in array[::-1]:
    do stuff
17
Swiss

Avec reversed et list :

>>> list1 = [1,2,3]
>>> reversed_list = list(reversed(list1))
>>> reversed_list
>>> [3, 2, 1]
14
Eyal Levin

Façons possibles,

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

list1.reverse()

list1[::-1]
11
Sanjay Pradeep
array=[0,10,20,40]
for e in reversed(array):
  print e
10

Utiliser Reverse (array) serait probablement le meilleur itinéraire.

>>> array = [1,2,3,4]
>>> for item in reversed(array):
>>>     print item

Si vous avez besoin de comprendre comment implémenter ceci sans utiliser le reversed intégré.

def reverse(a):
    midpoint = len(a)/2
    for item in a[:midpoint]:
        otherside = (len(a) - a.index(item)) - 1
        temp = a[otherside]
        a[otherside] = a[a.index(item)]
        a[a.index(item)] = temp
    return a

Cela devrait prendre O(N) temps.

7
gpj

Si vous souhaitez stocker les éléments de la liste inversée dans une autre variable, vous pouvez utiliser revArray = array[::-1] ou revArray = list(reversed(array)).

Mais la première variante est légèrement plus rapide:

z = range(1000000)
startTimeTic = time.time()
y = z[::-1]
print("Time: %s s" % (time.time() - startTimeTic))

f = range(1000000)
startTimeTic = time.time()
g = list(reversed(f))
print("Time: %s s" % (time.time() - startTimeTic))

Sortie:

Time: 0.00489711761475 s
Time: 0.00609302520752 s
5
Temak

VALEURS ORGANISATRICES:

En Python, l’ordre des listes peut aussi être manipulé avec sort, en organisant vos variables dans l’ordre numérique/alphabétique:

Temporairement:

print(sorted(my_list))

Permanent:

my_list.sort(), print(my_list)

Vous pouvez trier avec le drapeau "reverse = True":

print(sorted(my_list, reverse=True))

ou

my_list.sort(reverse=True), print(my_list)

SANS ORGANISER

Peut-être que vous ne voulez pas trier les valeurs, mais seulement les inverser. Ensuite, nous pouvons le faire comme ceci:

print(list(reversed(my_list)))

** Les numéros ont la priorité sur l'alphabet dans l'ordre de la liste. L'organisation Python values ​​est géniale.

5
Marcelo Lunardi

Utiliser la compréhension de la liste:

[array[n] for n in range(len(array)-1, -1, -1)]
4
koo

Vous pouvez utiliser reversed()

array=[0,10,20,40]

for e in reversed(array):
  print e
3
Davis
def reverse(text):
    output = []
    for i in range(len(text)-1, -1, -1):
        output.append(text[i])
    return output
3
Shawn Tsai

Strictement parlant, la question n'est pas de savoir comment renvoyer une liste dans l'ordre inverse, mais plutôt comment inverser une liste avec un exemple de nom de liste array.

Pour inverser une liste nommée "array", utilisez array.reverse().

La méthode slice extrêmement utile décrite peut également être utilisée pour inverser une liste à la place en la définissant comme une modification en tranches de lui-même à l'aide de array = array[::-1].

3
mogga

Vous pouvez également utiliser le complément au niveau du bit de l'index du tableau pour parcourir le tableau en sens inverse:

>>> array = [0, 10, 20, 40]
>>> [array[~i] for i, _ in enumerate(array)]
[40, 20, 10, 0]

Quoi que vous fassiez, ne le faites pas de cette façon.

3
101

La traduction la plus directe de vos besoins en Python est cette instruction for:

for i in xrange(len(array) - 1, -1, -1):
   print i, array[i]

C'est plutôt cryptique mais peut être utile.

2
John Machin

Utilisation de la logique

Utiliser une certaine logique de la vieille école pour pratiquer pour des entretiens.

Échanger les numéros d'avant en arrière. Utilisation de deux pointeurs index[0] and index[last]

def reverse(array):
    n = array
    first = 0
    last = len(array) - 1
    while first < last:
      holder = n[first]
      n[first] = n[last]
      n[last] = holder
      first += 1
      last -= 1
    return n

input -> [-1 ,1, 2, 3, 4, 5, 6]
output -> [6, 1, 2, 3, 4, 5, -1]
2
Israel Manzo
def reverse(my_list):
  L = len(my_list)
  for i in range(L/2):
    my_list[i], my_list[L-i - 1] = my_list[L-i-1], my_list[i]
  return my_list
2
Jeff Mandell

Utilisez la fonction inversée comme suit et imprimez-la

>>> for element in reversed(your_array):
...     print element
2
Nabin

Vous pouvez toujours traiter la liste comme une pile, extrayant les éléments du haut de la pile à partir du fond de la liste. De cette façon, vous tirez parti des caractéristiques de pile d'une pile premier entré dernier sorti. Bien sûr, vous consommez le premier tableau. J'aime cette méthode dans la mesure où elle est assez intuitive en ce sens qu'une liste est consommée depuis le back-end, tandis que l'autre est construite depuis le front-end.

>>> l = [1,2,3,4,5,6]; nl=[]
>>> while l:
        nl.append(l.pop())  
>>> print nl
[6, 5, 4, 3, 2, 1]
2
Rick

Inverser sur place en inversant les références des indices opposés:

>>> l = [1,2,3,4,5,6,7]    
>>> for i in range(len(l)//2):
...     l[i], l[-1-i] = l[-1-i], l[i]
...
>>> l
[7, 6, 5, 4, 3, 2, 1]
1
user4776653
def reverse(text):
    lst=[]
    for i in range(0,len(text)):
        lst.append(text[(len(text)-1)-i])
    return ''.join(lst)

print reverse('reversed')
1
dks

utilisation

print(reversed(list_name))
1
hmn Falahi
list_data = [1,2,3,4,5]
l = len(list_data)
i=l+1
rev_data = []
while l>0:
  j=i-l
  l-=1
  rev_data.append(list_data[-j])
print "After Rev:- %s" %rev_data 
1
Rohan Chavan

Avec un minimum de fonctions intégrées, en supposant que ses paramètres d'interview

array = [1, 2, 3, 4, 5, 6,7, 8]
inverse = [] #create container for inverse array
length = len(array)  #to iterate later, returns 8 
counter = length - 1  #because the 8th element is on position 7 (as python starts from 0)

for i in range(length): 
   inverse.append(array[counter])
   counter -= 1
print(inverse)
1
Fed
>>> l = [1, 2, 3, 4, 5]
>>> print(reduce(lambda acc, x: [x] + acc, l, []))
[5, 4, 3, 2, 1]
0
grf

Peut être fait en utilisant __reverse__, qui retourne un générateur.

>>> l = [1,2,3,4,5]
>>> for i in l.__reversed__():
...   print i
... 
5
4
3
2
1
>>>
0
SuperNova
>>> L = [1, 2, 3, 4]
>>> L = [L[-i] for i in range(1, len(L) + 1)]
>>> L
[4, 3, 2, 1]
0
k15