当前位置: 首页 > 面试题库 >

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

舒斯伯
2023-03-14
问题内容

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

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

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


问题答案:

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


 类似资料:
  • null 一些示例输出数据: *编辑:工作的scala代码行:

  • 我有两个实体,没有主键或外键引用,但我需要有一个单向实体使用或提取关系实体。使用Spring数据JPA。 以下是实体类: DAO类: 公共接口CarHistoryDAO扩展了JPararePository、JpaSpecificationExecutor{} 服务类别: 我使用的是Spring data jpa,实现了Spring data jpa中的使用规范。有没有什么方法可以避免N+1迭代问题

  • 前面章节中,已经对列表(list)、元组(tuple)、字典(dict)、集合(set)这些序列式容器做了详细的介绍。值得一提的是,这些序列式容器有一个共同的特性,它们都支持使用 for 循环遍历存储的元素,都是可迭代的,因此它们又有一个别称,即迭代器。 从字面来理解,迭代器指的就是支持迭代的容器,更确切的说,是支持迭代的容器类对象,这里的容器可以是列表、元组等这些 Python 提供的基础容器,

  • 上面简单的介绍了一下迭代,迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。现在正式进入主题:迭代器,迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。 迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next(),且字符串,列表或元组对象都可用于创建迭代器,迭代器对象可以使用常规 for 语句进行遍历,也

  • 如何在迭代中更改python迭代器? 例如: 此打印: 我想打印: 编辑:抱歉,这个问题让人们感到困惑。我对为什么当我在for循环中尝试更改迭代器时,for循环在下一次迭代中忽略它很感兴趣。 其他人已经提交了一个答案来清除我的困惑。范围创建一个列表,然后for循环将迭代器分配给列表中的下一个变量。

  • 本文向大家介绍Python迭代器与可迭代与生成器,包括了Python迭代器与可迭代与生成器的使用技巧和注意事项,需要的朋友参考一下 示例 一个迭代是一个对象,可以返回一个迭代器。具有状态且具有__iter__  方法并返回迭代器的任何对象都是可迭代的。也可能是没有状态的对象,该对象实现了__getitem__方法。-该方法可以获取索引(从零开始),并IndexError在索引不再有效时引发。 Py