Итерация по парам в списке (круговая мода) в Python

Проблема проста, я хочу перебирать каждый элемент списка и следующий в паре (оборачивая последний с первым).

Мы думали о двух нелепых способах сделать это:

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-кратная (с тройками, квартетами и т. д. вместо пар) версия.

Ответы на вопрос(13)

Ваш ответ на вопрос