Проблема проста, я хочу перебирать каждый элемент списка, а следующий - попарно (обертывание последнего одним).
Я подумал о двух непитонистских способах этого:
def pairs(lst):
n = len(lst)
for i in range(n):
yield lst[i],lst[(i+1)%n]
и
def pairs(lst):
return zip(lst,lst[1:]+[lst[:1]])
ожидаемый вывод:
>>> for i in pairs(range(10)):
print i
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
(5, 6)
(6, 7)
(7, 8)
(8, 9)
(9, 0)
>>>
любые предложения о более питоническом способе сделать это? может быть, есть предопределенная функция, о которой я не слышал?
также может быть интересна более общая n-кратная (с тройками, квартетами и т.д. вместо пар) версия.