it-swarm.com.de

Wie kann ich eine Liste in Python umkehren?

Wie kann ich in Python Folgendes tun?

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

Ich muss die Elemente eines Arrays haben, aber vom Ende bis zum Anfang.

913
Leo.peis

Sie können die Funktion reversed wie folgt verwenden:

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

Beachten Sie, dass reversed(...) keine Liste zurückgibt. Sie können eine umgekehrte Liste mit list(reversed(array)) erhalten.

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

Die erweiterte Slice-Syntax wird ausführlich in Python Neuer Eintrag für Release 2.3.5 erläutert

Auf besonderen Wunsch in einem Kommentar dies ist die aktuellste Schnittdokumentation .

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

Oder

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

So duplizieren Sie die Liste:

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

So kehren Sie die Liste vor Ort um:

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

Ich denke, der beste Weg, eine Liste in Python umzukehren, ist:

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

Die Arbeit ist erledigt und Sie haben eine umgekehrte Liste.

44
prossellob

Um dieselbe Liste umzukehren, verwenden Sie:

array.reverse()

Um eine umgekehrte Liste einer anderen Liste zuzuweisen, verwenden Sie:

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

Verwenden des Schneidens, z. array = array [:: - 1], ist ein ordentlicher Trick und sehr pythonisch, aber für Neulinge vielleicht etwas dunkel. Die Verwendung der reverse () -Methode ist eine gute Methode für die tägliche Codierung, da sie leicht lesbar ist.

Wenn Sie jedoch eine Liste wie in einer Interviewfrage umkehren müssen, können Sie solche integrierten Methoden wahrscheinlich nicht verwenden. Der Interviewer wird sich eher mit der Herangehensweise an das Problem als mit der Tiefe des Python - Wissens befassen. Es ist ein algorithmischer Ansatz erforderlich. Das folgende Beispiel mit einem klassischen Swap könnte eine Möglichkeit sein, dies zu tun:

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]

Beachten Sie, dass dies bei Tupeln oder Zeichenfolgen nicht funktioniert, da Zeichenfolgen und Tupel unveränderlich sind, d. H. Sie können nicht in sie schreiben, um Elemente zu ändern.

23
SimonM

Ich finde (im Gegensatz zu einigen anderen Vorschlägen), dass l.reverse() bei weitem der schnellste Weg ist, eine lange Liste in Python 3 und 2 umzukehren. Es würde mich interessieren, ob andere diese replizieren können Timings.

l[::-1] ist wahrscheinlich langsamer, da die Liste vor dem Umkehren kopiert wird. Das Hinzufügen des Aufrufs list() um den von reversed(l) erstellten Iterator muss zusätzlichen Aufwand verursachen. Wenn Sie eine Kopie der Liste oder einen Iterator möchten, verwenden Sie natürlich die entsprechenden Methoden, aber wenn Sie die Liste einfach umkehren möchten, scheint l.reverse() der schnellste Weg zu sein.

Funktionen

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

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

Mit reversed und list :

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

Mögliche Wege,

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

Die wahrscheinlich beste Route wäre umgekehrt (Array).

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

Wenn Sie verstehen müssen, wie dies implementiert werden kann, ohne das eingebaute reversed zu verwenden.

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

Dies sollte O(N) Zeit in Anspruch nehmen.

7
gpj

Wenn Sie die Elemente der umgekehrten Liste in einer anderen Variablen speichern möchten, können Sie revArray = array[::-1] oder revArray = list(reversed(array)) verwenden.

Die erste Variante ist aber etwas schneller:

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))

Ausgabe:

Time: 0.00489711761475 s
Time: 0.00609302520752 s
5
Temak

ORGANISIERENDE WERTE:

In Python kann auch die Reihenfolge der Listen mit sort geändert werden, wobei die Variablen in numerischer/alphabetischer Reihenfolge angeordnet werden:

Vorübergehend:

print(sorted(my_list))

Permanent:

my_list.sort(), print(my_list)

Sie können mit dem Flag "reverse = True" sortieren:

print(sorted(my_list, reverse=True))

oder

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

OHNE ORGANISIERUNG

Vielleicht möchten Sie keine Werte sortieren, sondern nur die Werte umkehren. Dann können wir es so machen:

print(list(reversed(my_list)))

** Zahlen haben in der Auflistungsreihenfolge Vorrang vor dem Alphabet. Die Organisation der Python -Werte ist fantastisch.

5
Marcelo Lunardi

Listenverständnis verwenden:

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

Sie können reversed() verwenden

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

Streng genommen lautet die Frage nicht, wie eine Liste umgekehrt zurückgegeben wird, sondern wie eine Liste mit einem Beispiellistennamen array umgekehrt wird.

Um eine Liste mit dem Namen "array" umzukehren, verwenden Sie array.reverse().

Die unglaublich nützliche Slice-Methode, wie sie beschrieben wurde, kann auch verwendet werden, um eine vorhandene Liste umzukehren, indem die Liste mit array = array[::-1] als in Segmente unterteilte Modifikation ihrer selbst definiert wird.

3
mogga

Sie können auch das bitweise Komplement des Array-Index verwenden, um das Array in umgekehrter Reihenfolge zu durchlaufen:

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

Was auch immer Sie tun, tun Sie es nicht so.

3
101

Die direkteste Übersetzung Ihrer Anforderung in Python lautet for:

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

Dies ist eher kryptisch, kann aber nützlich sein.

2
John Machin

Mit etwas Logik

Verwenden einer alten Schullogik zum Üben für Interviews.

Zahlen von vorne nach hinten tauschen. Mit zwei Zeigern 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

Verwenden Sie die Funktion mgekehrt wie folgt und drucken Sie sie aus

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

Sie können die Liste jederzeit wie einen Stapel behandeln, indem Sie die Elemente vom hinteren Ende der Liste oben auf dem Stapel platzieren. Auf diese Weise nutzen Sie die First-in-Last-Out-Eigenschaften eines Stapels. Natürlich verbrauchen Sie das 1. Array. Ich mag diese Methode insofern, als sie ziemlich intuitiv ist, als man sieht, wie eine Liste vom Backend aus konsumiert wird, während die andere vom Frontend aus erstellt wird.

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

In-Place-Umkehrung durch Vertauschen von Referenzen entgegengesetzter Indizes:

>>> 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

verwenden

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

Mit einem Minimum an integrierten Funktionen, vorausgesetzt, es handelt sich um Intervieweinstellungen

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

Kann mit __reverse__ durchgeführt werden, das einen Generator zurückgibt.

>>> 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