2016-04-15 3 views
0

Ich habe eine Liste von Elementen, die ich regelmäßig zyklisch durchlaufen möchte, indem ich auf das erste (0th) Element zugreife und es anschließend auf die Rückseite der Liste verschiebe. Was ist der beste Weg, dies zu erreichen? Meine gewünschte Syntax ist unten gezeigt.Durchlauf durch Listeneinträge

items = ["Alex", "Bob", "Charlie", "Doug", "Eddie"] 

display_next_item(items) 
# Alex 

display_next_item(items) 
# Bob 

# ... 

display_next_item(items) 
# Eddie 

display_next_item(items) 
# Alex 
+0

@TessellatingHeckler Ich scheine falsch meine Frage gespalten und mögliche Antwort. Behoben - Entschuldigung. – 2Cubed

Antwort

3

Sie können itertools.cycle() verwenden:

from itertools import cycle 

L = [10, 20, 30] 
cycled_list = cycle(L) 

10 Artikel Erhalten:

for x in range(10): 
    print(next(cycled_list)) 

Ausgang:

10 
20 
30 
10 
20 
30 
10 
20 
30 
10 

Holen Sie sich das nächste Element mit next(cycled_list).

Hinweis itertools.cycle() erstellt eine Kopie Ihrer Liste. Sie können dies durch vermeiden Sie Ihre eigenen Zyklus Iterator-Funktion zu schreiben, die nur mit Sequenzen, aber nicht mit Iteratoren arbeitet:

def my_cycle(seq): 
    while seq: 
     for element in seq: 
      yield element 

cycled_list = my_cycle(L) 
for x in range(10): 
    print(next(cycled_list)) 

Ausgang:

10 
20 
30 
10 
20 
30 
10 
20 
30 
10 

Die zweite Methode, die meisten performant sein sollte, weil es nicht der Fall ist Kopie irgendein Teil der Liste überhaupt.

0

Sie können .pop() mit .append() verwenden:

items = [1, 2, 3, 4, 5] 
item = items.pop(0) 
items.append(item) 
print(item) # 1 
print(items) # [2, 3, 4, 5, 1] 
Verwandte Themen