Используйте Rolling or sliding window iterator in Python решения:
>>> from itertools import islice
>>> def window(seq, n=2):
... "Returns a sliding window (of width n) over data from the iterable"
... " s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... "
... it = iter(seq)
... result = tuple(islice(it, n))
... if len(result) == n:
... yield result
... for elem in it:
... result = result[1:] + (elem,)
... yield result
...
>>> path = window({1, 2, 3, 4})
>>> for step in gen:
... print path
(1, 2)
(2, 3)
(3, 4)
Это происходит, чтобы следовать порядку сортировки, потому что для целых чисел питона hash(x) == x
и, таким образом последовательности 1, 2, 3, 4 вставляются в указанном порядке в набор.
Мне нравится этот рецепт, хотя он более общий, чем мне нужно. Интересно, почему этот рецепт был заменен другим в текущей документации 'itertools'? – max
@max: он был заменен рецептом '' pairwise' для иллюстрации 'tee' '(http://hg.python.org/cpython/rev/ea058504104c). Рецепты там, чтобы показать функции модуля, и 'tee()' еще не использовался на этой странице. –