我想循环进入子列表。我通过执行以下代码来实现。
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>
我还希望输出保持相同的类型,list
,numpy.array
,torch.Tensor
等
答案 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]