我有三个 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/