甲的Python配方(在Python
2.6,使用
itertools.izip_longest):
def grouper(n, iterable, fillvalue=None): "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" args = [iter(iterable)] * n return itertools.zip_longest(*args, fillvalue=fillvalue)
用法示例:
>>> list(grouper(3, range(9)))[(0, 1, 2), (3, 4, 5), (6, 7, 8)]>>> list(grouper(3, range(10)))[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, None, None)]
如果您希望最后一组短于其他组而不是用填充
fillvalue,则可以例如更改如下代码:
>>> def mygrouper(n, iterable):... args = [iter(iterable)] * n... return ([e for e in t if e != None] for t in itertools.zip_longest(*args))... >>> list(mygrouper(3, range(9)))[[0, 1, 2], [3, 4, 5], [6, 7, 8]]>>> list(mygrouper(3, range(10)))[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]


![将列表分成n组的另一种方法[重复] 将列表分成n组的另一种方法[重复]](http://www.mshxw.com/aiimages/31/394958.png)
