1
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

上面的函数 group(list, size) 接受一个列表并分成给定大小的较小列表。

我需要这样的东西

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

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

4

3 回答 3

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]]
于 2013-06-27T06:47:31.913 回答
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 说明的切片。

于 2013-06-27T06:39:58.810 回答
-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]]

于 2013-06-27T06:46:54.360 回答