美文网首页
不同集合上元素的迭代-itertools.chain()的使用

不同集合上元素的迭代-itertools.chain()的使用

作者: shu_ke | 来源:发表于2019-01-03 18:02 被阅读9次

不同集合上元素的迭代-itertools.chain()的使用

问题

你想在多个对象执行相同的操作,但是这些对象在不同的容器中,你希望代码在不失可读性的情况下避免写重复的循环。

解决方案

itertools.chain() 方法可以用来简化这个任务。 它接受一个可迭代对象列表作为输入,并返回一个迭代器,有效的屏蔽掉在多个容器中迭代细节。 为了演示清楚,考虑下面这个例子:

>>> from itertools import chain
>>> a = [1, 2, 3, 4]
>>> b = ['x', 'y', 'z']
>>> for x in chain(a, b):
... print(x)
...
1
2
3
4
x
y
z
>>>

使用 chain() 的一个常见场景是当你想对不同的集合中所有元素执行某些操作的时候。比如:

# Various working sets of items
active_items = set()
inactive_items = set()

# Iterate over all items
for item in chain(active_items, inactive_items):
    # Process item

这种解决方案要比像下面这样使用两个单独的循环更加优雅,

for item in active_items:
    # Process item
    ...

for item in inactive_items:
    # Process item
    ...

讨论

itertools.chain() 接受一个或多个可迭代对象作为输入参数。 然后创建一个迭代器,依次连续的返回每个可迭代对象中的元素。 这种方式要比先将序列合并再迭代要高效的多。比如:

# Inefficent
for x in a + b:
    ...

# Better
for x in chain(a, b):
    ...

第一种方案中, a + b 操作会创建一个全新的序列并要求a和b的类型一致。 chian() 不会有这一步,所以如果输入序列非常大的时候会很省内存。 并且当可迭代对象类型不一样的时候 chain() 同样可以很好的工作。

不同集合上元素的迭代 — python3-cookbook 3.0.0 文档

相关文章

  • 不同集合上元素的迭代-itertools.chain()的使用

    不同集合上元素的迭代-itertools.chain()的使用 问题 你想在多个对象执行相同的操作,但是这些对象在...

  • 理解Java中的Set结构

    1.1. 集合元素迭代(掌握) 1.1.1. 集合元素遍历(掌握) 对集合中的每一个元素获取出来。 使用for遍历...

  • 2021-07-07 JDK源码解析-Collection.it

    对上面的代码,使用迭代器遍历集合,获取集合中的元素。而单列集合获取迭代器的方法就使用到了工厂方法模式。 Colle...

  • 迭代器

    一。iterator():返回Iterator接口的实例,只用于遍历集合元素集合元素的遍历操作,使用迭代器Iter...

  • C# 编程概念

    迭代器 迭代器用于逐步迭代集合。迭代器方法使用 yield return 返回元素,每次返回一个。到达 yield...

  • Java 集合

    1.创建集合,并使用forEach和迭代器分别遍历 2.集合添加集合,集合元素个数,集合化为Object数组(可以...

  • 标准模板库STL

    容器:管理特定类型的对象的集合。 迭代器:迭代对象集合的元素。屏蔽了底层容器的实现。 算法:操作对象集合的元素,查...

  • 寒假14:Set集合

    Set集合特点:不包含重复元素的集合没有带索引的方法,所以不能使用普通for循环遍历HashSet:对集合的迭代顺...

  • Python学习笔记-迭代器与生成器

    迭代器时访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到所有元素被访问,迭代器只能往前不会后退。...

  • 03.迭代器的概述和测试

    迭代器 java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通...

网友评论

      本文标题:不同集合上元素的迭代-itertools.chain()的使用

      本文链接:https://www.haomeiwen.com/subject/lkjqrqtx.html