一次循环一个列表和一个子列表

时间:2018-11-21 15:13:22

标签: python

我想循环进入子列表。我通过执行以下代码来实现。

def batchGenerator(samples, subsetSize):
    i=0
    while (i < (len(samples) - subsetSize + 1)):
        yield samples[i: i + subsetSize]
        i = i + subsetSize

是否有更多的标准库函数可以执行相同的操作?

我想像这样使用它:

for subl in batchGenerator(range(100), 10):
    print (max(subl))

输出:

9
19
29
39
49
59
69
79
89
99

编辑:

我希望截断少于subsetSize的尾随元素,并且我发现@ s3cur3解决方案在这种情况下最为优雅(与类似线程What is the most "pythonic" way to iterate over a list in chunks?中的解决方案相比)< / p>

我还希望输出保持相同的类型,listnumpy.arraytorch.Tensor

1 个答案:

答案 0 :(得分:2)

怎么样:

def batchGenerator(samples, subsetSize):
    return (samples[i:i+subsetSize] for i  in range(0, len(samples), subsetSize))

此处的range()调用使您可以迭代列表的长度,一次跳转subsetSize(因此,您得到i的0、10、20,...。 。,在您的示例中为90)。

已编辑以回复评论

如果要允许输入为列表列表,则需要使用如下生成器语法:

def batchGenerator(listOfSampleLists, subsetSize):
    for sampleList in listOfSampleLists:
        for i in range(0, len(sampleList), subsetSize):
            yield sampleList[i:i+subsetSize]