为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2021-08-24 16:46:40
我想在子列表中循环。我通过执行以下代码来实现它。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]


查看完整回答
反对 回复 2021-08-24
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信