2015-11-05 59 views
1

我想用固定数字对相邻列表项进行分组。如在Python中高效地分组相邻列表项

a = [1, 2, 3, 4, 5, 6]

groupby(a, 2)结果是[(1, 2), (3, 4), (5, 6)]

groupby(a, 3)结果是[(1, 2, 3), (4, 5, 6)]

这里是我的解决方案

def groupby(a, l): 
    ret = [] 
    for idx in range(len(a)/l): 
     ret.append(tuple(a[idx*l:(idx+1)*l:])) 
    return ret 

有没有更有效的方法来实现它?

+0

是否保证输入列表的长度可以被分组号码整除? I.E.如果列表的长度是7,应该发生什么? – SethMMorton

+0

@SethMMorton,把所有遗体留作最后一组 – zangw

回答

0

是的,您打算使用zip

编辑:固定格式

具体来说,

def groupby(a, l): 
    ret = [] 
    n = len(a) // l 
    it = len(a) // n 
    return list(zip(*(a[i * it:i * it + it] for i in range(n)))) 
1
>>> a = [1, 2, 3, 4, 5, 6] 
>>> groupby = lambda l, n: [tuple(l[i:i+n]) for i in range(0, len(l), n)] 
>>> groupby(a, 3) 
[(1, 2, 3), (4, 5, 6)] 
>>> groupby(a, 2) 
[(1, 2), (3, 4), (5, 6)] 
>>>