我想在子列表中循环。我通过执行以下代码来实现它。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))输出:9192939495969798999编辑:我想要少于subsetSize被截断的尾随元素,我发现 @s3cur3 解决方案对于这种情况是最优雅的(与类似线程中的解决方案相比:What is the most "pythonic" way to iterate over a list in chunks ? )我也更喜欢输出保持相同的类型list,numpy.array, torch.Tensor, 等
1 回答
冉冉说
TA贡献1877条经验 获得超1个赞
怎么样:
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]
添加回答
举报
0/150
提交
取消