在 Python 中多次反转迭代器
Reverse an iterator multiple times in 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)
我会want/expect得到输出:
[0, 1, 2, 2, 1, 0, 0, 1, 2, 2, 1, 0, ... ]
但是,在第一次使用 reverse 之后,我得到了错误:
TypeError: 'range_iterator' object is not reversible
什么是不需要解包迭代器的有效解决方法?
您可以简单地交替使用原始迭代器和反向迭代器。
你可以从这个简单的例子开始:
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]
感谢大家的回复。我事先知道我可以只使用一个包含原始版本和反向版本的列表以及 select 我需要的那个,但我真的想看看是否有一些对我来说很自然的东西,比如 reversed(reversed(whatever))
。所以,让它更紧凑一点,并添加一个布尔值 do_reverse
(我在实际项目中需要它)我会用这样的东西:
iterator = range(3)
do_reverse = True
N = 5
k = 0
out = []
while k < N:
for i in [iterator, reversed(iterator)][k % 2 * do_reverse]:
out.append(i)
k += 1
print(out)
我试图使用 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)
我会want/expect得到输出:
[0, 1, 2, 2, 1, 0, 0, 1, 2, 2, 1, 0, ... ]
但是,在第一次使用 reverse 之后,我得到了错误:
TypeError: 'range_iterator' object is not reversible
什么是不需要解包迭代器的有效解决方法?
您可以简单地交替使用原始迭代器和反向迭代器。 你可以从这个简单的例子开始:
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]
感谢大家的回复。我事先知道我可以只使用一个包含原始版本和反向版本的列表以及 select 我需要的那个,但我真的想看看是否有一些对我来说很自然的东西,比如 reversed(reversed(whatever))
。所以,让它更紧凑一点,并添加一个布尔值 do_reverse
(我在实际项目中需要它)我会用这样的东西:
iterator = range(3)
do_reverse = True
N = 5
k = 0
out = []
while k < N:
for i in [iterator, reversed(iterator)][k % 2 * do_reverse]:
out.append(i)
k += 1
print(out)