Shift_right python mit schleifen

Die Frage ist, eine shift_right Funktion zu schreiben, damit sie jedes Element in der Liste nach rechts verschiebt. Zum Beispiel, wenn die Liste ist

 L = ['a','b','c','d'] 

shift_right(L) sollte ['d','a','b','c'] .

Das habe ich versucht Meine Ausgabe ist ['d','a','a','a'] :

 def shift_right(L): last_item = L[-1] for i in range(1, len(L)): L[i] = L[i-1] L[0] = last_item 

3 Solutions collect form web for “Shift_right python mit schleifen”

Ich würde es so umsetzen:

 def shift_right(L): if len(L) > 0: L.insert(0, L.pop()) 

Wie Lee richtig kommentiert, ist dies ein rotierender Betrieb eher als eine Verschiebung.

Ich werde das in Vollständigkeit hinzufügen.

Wenn du mehrere Zeit verkehrst, kannst du so etwas benutzen

 def rotate(L, n): if len(L) is not 0: shift = n % len(L) L[:shift], L[shift:] = L[-shift:], L[:-shift] 

Wenn du das oft während deines Programms machst, könnte es sich lohnen, einen Deque zu benutzen. Sie können Ihre Liste zu einem Deque wie folgt konvertieren:

 from collections import deque L = deque(L) 

Dann drehen Sie es n Räume nach rechts, können Sie verwenden

 L.rotate(n) 

Wenn du es wieder in eine Liste umwandeln möchtest, kannst du es machen

 L = list(L) 

Es ist besser zu vermeiden, hin und her zu konvertieren, da es so viel Zeit braucht wie mehrere Rotationen in der Liste. Deques Arbeit am besten, wenn Sie zugreifen, Hinzufügen und Löschen um ihre Anfänge und endet.

Ich habe gerade die Antwort für die Frage herausgefunden. Es ist wie folgt.

 def shift_right(L): last_item = L[-1] for i in range(1, len(L)): L[len(L) - i] = L[len(L) - i - 1] L[0] = last_item 
Python ist die beste Programmiersprache der Welt.