Python中的循环迭代器

时间:2015-10-05 23:22:23

标签: python

我正在解决编程问题,我需要在数组/列表中的任何给定位置处启动并迭代直到我到达起始位置。我想过一个循环缓冲区,如方法(出队),但我不确定是否有迭代方法,这样做。

假设:

[1,10,20]

所以当我开始迭代位置时:1我希望迭代输出为:

  

10,20,1

我目前的解决方案:

startPosition = 1
data = [1,10,20]
for i in range(0, 3):
    pos = (startPosition+i)%3
    print data[pos]

还有其他优雅的解决方案吗?还是容器呢?

研究:

我从itertools遇到循环,但这是一个无限循环。我将不得不使用下一个方法来获取并停在正确的位置。 Circular list iterator in Python

2 个答案:

答案 0 :(得分:4)

正如您所提到的,您可以使用恰好位于标准库中的双端队列:

from collections import deque

startPosition = 1
data = [1,10,20]

d = deque(data)
d.rotate(-startPosition)

你必须否定rotate的方向,因为默认情况下它会向右旋转。

答案 1 :(得分:1)

编程中的优雅有点主观。您的代码易于阅读/理解,是解决特定问题的最有效方法。肯定有用较少的字节编写代码的方法,但它们可能不像你的那样清晰,所以我不会称它们更优雅。如果您正在寻找更快的方法来解决分配的问题,那么您已经解决了O(n)的最大可能复杂性问题。