Iteruj nad parami na liście (cyklicznie) w Pythonie

Problem jest prosty, chcę iterować po każdym elemencie listy i następnym w parach (zawijając ostatni w pierwszy).

Pomyślałem o dwóch niepotwierdzonych sposobach:

def pairs(lst):
    n = len(lst)
    for i in range(n):
        yield lst[i],lst[(i+1)%n]

i:

def pairs(lst):
    return zip(lst,lst[1:]+[lst[:1]])

oczekiwany wynik:

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

jakieś sugestie o bardziej pytonicznym sposobie robienia tego? może istnieje predefiniowana funkcja, o której nie słyszałem?

interesująca może być również bardziej ogólna wersja n-krotna (z tripletami, kwartetami itp. zamiast par).

questionAnswers(13)

yourAnswerToTheQuestion