我正在解决编程问题,我需要在数组/列表中的任何给定位置处启动并迭代直到我到达起始位置。我想过一个循环缓冲区,如方法(出队),但我不确定是否有迭代方法,这样做。
假设:
[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
答案 0 :(得分:4)
正如您所提到的,您可以使用恰好位于标准库中的双端队列:
from collections import deque
startPosition = 1
data = [1,10,20]
d = deque(data)
d.rotate(-startPosition)
你必须否定rotate
的方向,因为默认情况下它会向右旋转。
答案 1 :(得分:1)
编程中的优雅有点主观。您的代码易于阅读/理解,是解决特定问题的最有效方法。肯定有用较少的字节编写代码的方法,但它们可能不像你的那样清晰,所以我不会称它们更优雅。如果您正在寻找更快的方法来解决分配的问题,那么您已经解决了O(n)的最大可能复杂性问题。