对列表中的滑动窗口对进行Pythonic迭代?

9 python iteration list list-manipulation python-itertools

在滑动对中迭代列表的Pythonic有效方法是什么?这是一个相关的例子:

>>> l
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> for x, y in itertools.izip(l, l[1::2]): print x, y
... 
a b
b d
c f
Run Code Online (Sandbox Code Playgroud)

这是成对迭代,但我们如何在滑动对上进行迭代?意味着迭代对:

a b
b c
c d
d e
etc.
Run Code Online (Sandbox Code Playgroud)

这是对的迭代,除了每次将1对元素滑动而不是2个元素.谢谢.

chm*_*lig 13

你可以更简单.只需压缩列表,列表偏移一.

In [4]: zip(l, l[1:])
Out[4]: [('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e'), ('e', 'f'), ('f', 'g')]
Run Code Online (Sandbox Code Playgroud)


Gil*_*ilZ 7

怎么样:

for x, y in itertools.izip(l, l[1:]): print x, y
Run Code Online (Sandbox Code Playgroud)

  • @jtpereyda,Python 3有顶级函数`zip`,它与`itertools.izip`的作用相同.如果你不想在最后一对中有空位,你可以使用@ chmullig的答案. (3认同)