【发布时间】:2015-11-25 19:56:17
【问题描述】:
我想循环迭代一个列表(或任何其他可迭代的),我知道你可以使用itertools 中的cycle 函数来做到这一点(如here 所示),但是这个函数无限循环。我想知道是否有一种聪明的方法可以只做一次(并且不使用模运算符)。
我的意思是,我想迭代一个可迭代对象,以使最后一项是第一项。所以我想在迭代器到达可迭代的开头时开始迭代并停止。
类似的东西,但不那么丑:
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
【问题讨论】:
-
一次,你的意思是一份?
-
你能举个例子吗?如果
foo实现了你所需要的,for x in foo([1,2,3]): print(x)的输出会是什么? -
查看更新的问题。
-
查看我更新的答案,并请解释您要实现的目标与基本的 for 循环有何不同。如果没有不同,那么这个问题可能与Which is the most efficient way to iterate through a list in python? 重复。
-
如果你定义
points = [1, 2, 1, 4, 5],那么你的代码只输出前两个元素和“在1 时退出”。这是你想要的行为吗? (我的会输出1 2 1 4 5和“在 1 点退出”,所以这里有区别)
标签: python loops iterator cycle modulo