在Python中从列表中以n个项为一组的惯用方法?

11 投票
1 回答
5768 浏览
提问于 2025-04-15 20:31

给定一个列表

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)

撰写回答