从Python列表中获取n个项目组的惯用方法?

时间:2010-03-17 10:35:14

标签: python iteration

给出一个清单

A = [1 2 3 4 5 6]

是否有任何惯用(Pythonic)方式迭代它就好像它是

B = [(1, 2) (3, 4) (5, 6)]

除了索引?这感觉就像C的延续:

for a1,a2 in [ (A[i], A[i+1]) for i in range(0, len(A), 2) ]:

我不禁觉得应该有一些聪明的黑客使用itertools或切片等。

(当然,一次两个只是一个例子;我想要一个适用于任何n的解决方案。)

编辑:相关的Iterate over a string 2 (or n) characters at a time in Python但是即使是最干净的解决方案(使用zip接受)在没有列表理解和* -notation的情况下也不能很好地推广到更高的n。

1 个答案:

答案 0 :(得分:11)

来自http://docs.python.org/library/itertools.html

from itertools import izip_longest
def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

i = grouper(3,range(100))
i.next()
(0, 1, 2)