我想循环遍历列表(或任何其他可迭代的内容),我知道您可以使用cycle
中的itertools
函数执行此操作(如图所示{{3} }),但这个函数无限循环。我想知道是否有一种聪明的方法只做一次(并且不使用模运算符)。
我的意思是我希望以最后一项是第一项的方式迭代迭代。所以我想在迭代器到达可迭代的开头时开始迭代并停止。
像这样但不那么丑:
points = [1, 2, 3, 4, 5]
start = points[0]
iterator = cycle(points)
p = next(iterator)
while True:
print(p)
p = next(iterator)
if p == start:
print("quitting at", p)
break
答案 0 :(得分:1)
当然可以使用chain
和repeat
(适用于sequences)或tee
(适用于iterators):
>>> from itertools import chain, repeat, tee
>>> print(*chain(*repeat([1, 2, 3], 2)))
1 2 3 1 2 3
>>> print(*chain(*tee(i for i in [1,2,3])))
1 2 3 1 2 3
Asterisk用于unpack argument lists。
Answer by Ale(无重复链)如果已经将iterable分配给变量并且实际上需要两个周期,而不是八个或任何其他有限数,则更好。
代码与更新的问题中的代码相同:
points = [1, 2, 3, 4, 5]
for x in points:
print(x)
print("quitting at", points[0])
答案 1 :(得分:1)
你能解释一下你的要求有多好吗?
您对cycle
和only once
的意思是什么?
这不仅仅是for item in list: do someting with item
吗?
lista = range(10)
idx = 5
for item in lista[idx:]+lista[:idx]:
print item
另一个编辑:¿我的问题是否正确? 如果你要求的是在第一个项目处停止,那么你只需迭代迭代器来获取剩余的项目(然后重建迭代器?)。
points = [1,3,5,7,9]
iterator = iter(points)
iterator.next() #Let's remove a couple of items
iterator.next() #Let's remove a couple of items
for item in iterator:
print(item)
iterator = iter(points)
答案 2 :(得分:0)
为什么不链接或连接可迭代的?
a = [1,2,3]
for x in a + a:
print x
from itertools import chain, tee
for x in chain(tee(a, 2)):
print x
这看起来很简单