2016-04-15 3 views
0

У меня есть список элементов, которые я хотел бы периодически «прокручивать», получая доступ к первому (0-му) элементу и затем перемещая его в конец списка. Каков наилучший способ сделать это? Мой желаемый синтаксис показан ниже.Цикл через элементы списка

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 я, кажется, неправильно разделить мой вопрос и потенциальный ответ. Исправлено - извините. – 2Cubed

ответ

3

Вы можете использовать itertools.cycle():

from itertools import cycle 

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

Получить 10 пунктов:

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

Выход:

10 
20 
30 
10 
20 
30 
10 
20 
30 
10 

Получить следующий элемент с next(cycled_list).

Примечание itertools.cycle() делает копию вашего списка. Вы можете избежать этого писать свою собственную функцию цикла итератор, который работает только с последовательностями, но не с итераторов:

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

Выход:

10 
20 
30 
10 
20 
30 
10 
20 
30 
10 

Второй метод должен быть наиболее производительным, потому что не скопируйте любую часть списка вообще.

0

Вы можете использовать .pop() с .append():

items = [1, 2, 3, 4, 5] 
item = items.pop(0) 
items.append(item) 
print(item) # 1 
print(items) # [2, 3, 4, 5, 1] 
Смежные вопросы