在Python中从列表中以n个项为一组的惯用方法?
给定一个列表
A = [1 2 3 4 5 6]
有没有什么简单的(Python风格的)方法可以像这样遍历它
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的解决方案。)
编辑:相关的 在Python中每次遍历字符串的2个(或n个)字符,但即使是最简洁的解决方案(被接受的,使用zip)在处理更高的n时也不太好用,除非使用列表推导和*号语法。
1 个回答
12
来自 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)