首页 > 解决方案 > 在 Python 中多次反转迭代器

问题描述

我试图使用该函数多次反转相同的迭代器reversed。例如,使用代码:

iterator = range(3)
N = 5
k = 0
out = []
while k < N:
    for i in iterator:
        out.append(i)
    iterator = reversed(iterator)
    k += 1
print(out)

我希望/期望有输出:

[0, 1, 2, 2, 1, 0, 0, 1, 2, 2, 1, 0, ... ]

但是,在第一次使用 reverse 之后,我得到了错误:

TypeError: 'range_iterator' object is not reversible

什么是不需要解包迭代器的有效解决方法?

标签: pythoniterator

解决方案


您可以简单地交替原始迭代器和反向迭代器。你可以从这个简单的例子开始:

iterator = range(3)
N = 5
k = 0
out = []
while k < N:
    if k%2 == 0:
        it = iterator
    else:
        it = reversed(iterator)
    for i in it:
        out.append(i)
    k += 1
print(out)

[0, 1, 2, 2, 1, 0, 0, 1, 2, 2, 1, 0, 0, 1, 2]

推荐阅读