将列表拆分为较小的列表

时间:2013-06-27 06:31:47

标签: python list python-2.7

def group(l,size):
    length = len(l)
    new = []
    for i in range(0,length):
        for j in range(i,size):
            new[i].append(l[j])
    print new

上面的函数组(列表,大小),它取一个列表并拆分成给定大小的较小列表。

我需要这样的东西

  

输入:组([1,2,3,4,5,6,7,8,9],3)
  输出:[[1,2,3],[4,5,6],[7,8,9]]

但是上面代码的问题是显示索引超出范围。代码中有什么问题? 如何将元素追加到列表列表中?

3 个答案:

答案 0 :(得分:6)

使用切片。

>>> def group(l, size):
...     return [l[i:i+size] for i in range(0, len(l), size)]
... 
>>> group([1, 2, 3, 4, 5, 6, 7, 8, 9], 3)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

答案 1 :(得分:0)

尝试:

def group(l,size):
    length = len(l)
    new = []
    for i in range(0, length/size):
        new.append([])
    for i in range(0,len(new)):
        for j in range(i*size,(i*size)+size):
            new[i].append(l[i+j])
    print new

编辑: 不,不要这样做。使用像falsetru illustrates这样的切片。

答案 2 :(得分:-1)

粗略的解决方案是:]

def group(l,size):
    length = len(l)
    newlist = []
    newgroup = []
    j = 0
    for i in range(0,length):
        if(j<size - 1):
            j += 1
            newgroup.append(l[i])
        else:
            j = 0
            newgroup.append(l[i])
            newlist.append(newgroup)
            newgroup = []
    if(newgroup != []):
        newlist.append(newgroup)
    return newlist

print(group([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], 3))

结果:[[1,2,3],[4,5,6],[7,8,9],[10,11]]