如何遍历列表直到它到达最后一个元素,然后向后遍历它直到它到达第一个元素,然后重复?
在其他病房中,如何在一个跳出第一个和最后一个元素的模式中专门遍历一个列表?
e.g For a list of length=3
time=1, index=0
time=2, index=1
time=3, index=2
time=4, index=1
time=5, index=0
time=6, index=1
time=7, index=2
答案 0 :(得分:3)
如果你实际上从一个列表开始,你可以使用切片并反转一次反弹它:
def bounce(a_list):
yield from a_list
yield from reversed(a_list[1:-1])
for x in bounce([1, 2, 3, 4]):
print(x)
重复充气,增加乐趣。
for x in itertools.cycle(bounce([0, 1, 2])):
print(x)
答案 1 :(得分:2)
使用itertools.cycle
的一种方式:
from itertools import cycle
lst = [0, 1, 2]
res1 = cycle(lst + lst[-2:0:-1])
In [143]: [next(q.res1) for _ in range(10)]
Out[143]: [0, 1, 2, 1, 0, 1, 2, 1, 0, 1]
感谢@Chris_Rands指出列表理解可以很好地替换为list(itertools.islice(res1, 10))
。
答案 2 :(得分:0)
我还发现索引也可以使用
计算index = (time-1)%(2*length-2)