在Python中有效地对相邻列表项进行分组

时间:2015-11-05 06:07:31

标签: 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

是否有更有效的方式来实施它?

3 个答案:

答案 0 :(得分: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)]
>>> 

答案 1 :(得分: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))))

答案 2 :(得分:0)

我们可以使用itertools.izip_longest

请查看以下链接:

Alternative way to split a list into groups of n