在Python中高效地分组相邻的列表项

在Python中高效地分组相邻的列表项,python,list,Python,List,我想用固定的数字对相邻的列表项进行分组。比如 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 有没有

我想用固定的数字对相邻的列表项进行分组。比如

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

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

是的,您需要使用
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))))

我们可以使用
itertools.izip\u longest

请查看以下链接:


是否保证输入列表的长度可以被分组号整除?也就是说,如果列表的长度是7,会发生什么?@SethMMorton,将所有剩余部分作为最后一组
>>> 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)]
>>>