猿问

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

我想在子列表中循环。我通过执行以下代码来实现它。


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 ? )


我也更喜欢输出保持相同的类型list,numpy.array, torch.Tensor, 等


白猪掌柜的
浏览 133回答 1
1回答

冉冉说

怎么样:def batchGenerator(samples, subsetSize):&nbsp; &nbsp; return (samples[i:i+subsetSize] for i&nbsp; in range(0, len(samples), subsetSize))range()此处的调用可让您迭代到列表的长度,一次跳转subsetSize(因此i在您的示例中为您提供 0、10、20、...、90)。编辑回复评论:如果要允许输入为列表列表,则需要使用如下生成器语法:def batchGenerator(listOfSampleLists, subsetSize):&nbsp; &nbsp; for sampleList in listOfSampleLists:&nbsp; &nbsp; &nbsp; &nbsp; for i in range(0, len(sampleList), subsetSize):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yield sampleList[i:i+subsetSize]
随时随地看视频慕课网APP

相关分类

Python
我要回答