美文网首页
Python3 - 不同序列上元素的迭代

Python3 - 不同序列上元素的迭代

作者: 惑也 | 来源:发表于2018-12-22 13:03 被阅读18次

问题

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

解决方案

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

from itertools import chain

a = [1, 2, 3, 4]
b = ['x', 'y', 'z']

for i in chain(a, b):
    print(i, end = ' ')

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

讨论

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

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

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

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

相关文章

  • Python3 - 不同序列上元素的迭代

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

  • 015 泛型算法

    迭代器参数 一些算法从两个序列中读取元素。构成这两个序列的元素可以来自于不同类型的容器。例如,第一个序列可能保存于...

  • Sequences | lazy

    序列 Sequence 序列协议是集合类型结构中的基础。序列代表一系列类型相同的元素,你可以对这些元素进行迭代 ...

  • Python初级教程(11): for循环语句

    在本文中,您将学习使用for循环的不同变体对元素序列进行迭代。 1. for循环 Python中的for循环用于迭...

  • reversed() --反向迭代

    使用内建的reversed()函数实现反向迭代序列中的元素(字符串、列表、元组序列): 注意1、反向迭代只有在待处...

  • Python3 - 同时迭代多个序列

    问题 同时迭代多个序列,每次分别从一个序列中取一个元素。 解决方案 同时迭代多个序列时,使用 zip() 函数。比...

  • Swift 集合类新协议 Sequence

    序列 序列代表一系列类型相同的元素,你可以对这些元素进行迭代 Sequence协议 Sequence协议是集合类型...

  • zip()

    问题你想同时迭代多个序列,每次分别从一个序列中取一个元素。解决方案为了同时迭代多个序列,使用 zip() 函数。比...

  • Python3 迭代器与生成器

    Python3 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器是一个...

  • 2020-02-12 容器和算法

    1:STL迭代器删除失效问题: 对于序列容器来说,使用erase(iterator) 后面每个元素的迭代器都会实效,

网友评论

      本文标题:Python3 - 不同序列上元素的迭代

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