2015-11-05 47 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)] 
>>>