将长列表分成较短的常规列表

时间:2013-11-15 21:09:43

标签: python

我有一个很长的列表,我想打入更短的列表。我正在使用列表理解,但它似乎有点长而且不优雅。有没有更好的办法?

# z is a list
z = range(99)

##  zz should slice z into short lists with three members
##  using list comprehension I get this
zz = [ z[i : i+3] for i,x in enumerate(z) if i%3 == 0 ]

# seems a bit verbose. is there a cleaner way?

1 个答案:

答案 0 :(得分:1)

来自itertools(它是常见recipes之一):

import itertools

def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return itertools.izip_longest(fillvalue=fillvalue, *args)

示例:

>>> list(grouper(range(100), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11), (12, 13, 14), (15, 16, 17), (18, 19, 20), (21, 22, 23), (24, 25, 26), (27, 28, 29), (30, 31, 32), (33, 34, 35), (36, 37, 38), (39, 40, 41), (42, 43, 44), (45, 46, 47), (48, 49, 50), (51, 52, 53), (54, 55, 56), (57, 58, 59), (60, 61, 62), (63, 64, 65), (66, 67, 68), (69, 70, 71), (72, 73, 74), (75, 76, 77), (78, 79, 80), (81, 82, 83), (84, 85, 86), (87, 88, 89), (90, 91, 92), (93, 94, 95), (96, 97, 98), (99, None, None)]
相关问题