9 Stimmen

Verschieben von Werten unter Beibehaltung der Reihenfolge in einer Python-Liste

Ich habe eine Liste

a=[1,2,3,4,5]

und wollen seine Werte 'verschieben', so dass er sich in

a=[2,3,4,5,1]

und der nächste Schritt

a=[3,4,5,1,2]

Gibt es in Python eine eingebaute Funktion, die dies ermöglicht?

Oder gibt es einen kürzeren oder schöneren Weg als

b=[a[-1]]; b.extend(a[:-1]); a=b

25voto

Miles Punkte 29684
>>> a = [1,2,3,4,5]
>>> a.append(a.pop(0))
>>> a
[2, 3, 4, 5, 1]

Dies ist jedoch teuer, da der Inhalt der gesamten Liste verschoben werden muss, was O(n) ist. Eine bessere Wahl wäre vielleicht die Verwendung von collections.deque wenn es in Ihrer Python-Version verfügbar ist, die es ermöglichen, Objekte in ungefähr O(1)-Zeit an beiden Enden einzufügen und zu entfernen:

>>> a = collections.deque([1,2,3,4,5])
>>> a
deque([1, 2, 3, 4, 5])
>>> a.rotate(-1)
>>> a
deque([2, 3, 4, 5, 1])

Beachten Sie auch, dass diese beiden Lösungen eine Änderung des ursprünglichen Sequenzobjekts beinhalten, während Ihre Lösung eine neue Liste erstellt und sie der a . Wenn wir das also tun würden:

>>> c = a
>>> # rotate a

Mit Ihrer Methode, c würde sich weiterhin auf die ursprüngliche, nicht rotierte Liste beziehen, und mit meinen Methoden wird sie sich auf die aktualisierte beziehen, gedreht Liste/Dekade.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X