微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python中按n个块迭代迭代器?

如何解决在Python中按n个块迭代迭代器?

grouper() 从配方itertools文件食谱来靠近你想要什么:

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

但是,它将使用填充值填充最后一个块。

较不通用的解决方案仅适用于序列,但可以根据需要处理最后一个

[my_list[i:i + chunk_size] for i in range(0, len(my_list), chunk_size)]

最后,一种可在一般迭代器上运行且其行为符合预期的解决方案是

def grouper(n, iterable):
    it = iter(iterable)
    while True:
       chunk = tuple(itertools.islice(it, n))
       if not chunk:
           return
       yield chunk

解决方法

您能想到一种很好的方法(也许使用itertools)将迭代器拆分为给定大小的块吗?

因此,l=[1,2,3,4,5,6,7]withchunks(l,3)成为迭代器[1,3],[4,6],[7]

我可以想到一个小程序来做到这一点,但是使用itertools并不是一个好方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。