python - 在 Python 中连续迭代两个或多个容器的优雅而快速的方法?

标签 python iterator

我有三个 collection.deque,我需要做的是遍历它们并执行相同的操作:

for obj in deque1:  
    some_action(obj)  

for obj in deque2:  
    some_action(obj)

for obj in deque3:  
    some_action(obj)

我正在寻找一些功能 XXX,理想情况下可以让我编写:

for obj in XXX(deque1, deque2, deque3):  
    some_action(obj)

这里重要的是 XXX 必须足够高效 - 无需进行复制或静默使用 range() 等。我期待在内置函数中找到它,但到目前为止我没有发现任何类似的东西。

Python 中是否已经有这样的东西,或者我必须自己为此编写一个函数?

最佳答案

取决于您要处理的项目的顺序:

import itertools

for items in itertools.izip(deque1, deque2, deque3):
    for item in items:
        some_action(item)

for item in itertools.chain(deque1, deque2, deque3):
    some_action(item)

我建议这样做以避免硬编码实际的双端队列或双端队列数量:

deques = [deque1, deque2, deque3]
for item in itertools.chain(*deques):
    some_action(item)

为了演示上述方法的顺序不同:

>>> a = range(5)
>>> b = range(5)
>>> c = range(5)
>>> d = [a, b, c]
>>>
>>> for items in itertools.izip(*d):
...     for item in items:
...         print item,
...
0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
>>>
>>> for item in itertools.chain(*d):
...     print item,
...
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4
>>>

关于python - 在 Python 中连续迭代两个或多个容器的优雅而快速的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4795772/

相关文章:

c++ - 取消引用后递增迭代器 - *iter++。它是如何评价的?

python - 如何将 "python --version"的输出 append 到 bash shell 中的文件?

python - 如何将这个方程式放入 python 中?

python - 仅当调用字典键时才生成数据

python - 情绪分析中的否定处理

c++ - 迭代器算术

python - 如何从 OpenERP7 中的 act_window 调用 Python 函数?

c++ - 为什么基于 C++ 范围的 for 循环在每次迭代时调用析构函数?

java - for-each 循环如何知道从哪里开始?

c++ - 双向链表的实现