0

我试图编写一个函数来创建一组动态子列表,每个子列表包含传递给它的列表中的 5 个元素。这是我对代码的尝试

def sublists(seq):
    i=0
    x=[]
    while i<len(seq)-1:
        j=0
        while j<5:
            X.append(seq[i]) # How do I change X after it reaches size 5?
     #return set of sublists

编辑:

样本输入:[1,2,3,4,5,6,7,8,9,10]

预期输出:[[1,2,3,4,5],[6,7,8,9,10]]

4

3 回答 3

3

好吧,对于初学者来说,您需要(或至少应该)有两个列表,一个临时列表和一个永久列表,您需要返回(此外,您需要增加 j 和 i,或者更实际地,使用 for 循环,但我假设你只是忘了发布)。

EDIT删除了第一个代码,因为给出的样式与预期结果不匹配,请参阅其他两种可能性。

或者,更明智地:

def sublists(seq):
    x=[]
    for i in range(0,len(seq),5):
        x.append(seq[i:i+5])
    return x

或者,更明智的是,一个简单的列表推导:

def sublists(seq):
    return [seq[i:i+5] for i in range(0,len(seq),5)]

当给出列表时:

l = [1,2,3,4,5,6,7,8,9,10]

他们会回来

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
于 2012-05-16T05:14:49.910 回答
0

“动态子列表”是指将列表分成五个元素的组吗?这类似于您的方法:

def sublists(lst, n):
    ret = []
    i = 0
    while i < len(lst):
        ret.append(seq[i:i+n])
        i += n
    return ret

或者,使用迭代器:

def sublists(seq, n):
    it = iter(seq)
    while True:
        r = list(itertools.islice(it, 5))
        if not r:
            break
        yield r

这将返回一个列表的迭代器,列表长度最多为 5。(如果您list拨打电话,如果您没有以相同的顺序访问迭代器,则会发生奇怪的事情。)

于 2012-05-16T05:08:13.257 回答
0

你考虑过使用itertools.combinations(...)吗?

例如:

>>> from itertools import combinations
>>> l = [1,2,3,4,5,6]
>>> list(combinations(l, 5))
[(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6), (1, 3, 4, 5, 6), (2, 3, 4, 5, 6)]
于 2012-05-16T05:08:31.087 回答