Python中的循环迭代器

3

我正在解决一个编程问题,需要从数组/列表的任何给定位置开始迭代,直到达到起始位置。我考虑过类似循环缓冲区(双向队列)的方法,但不确定是否有一种迭代方法可以实现这个操作。

给定:

[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中的cycle可以实现循环,但这是一个无限循环。我需要使用next方法来获取并停止在正确的位置。Python中的循环列表迭代器


2
你可以使用 data[startPosition:] + data[:startPosition] 代替。 - Jose Ricardo Bustos M.
2个回答

4

正如您所提到的,您可以使用一个在标准库中的deque:

from collections import deque

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

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

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


1

在编程中,所谓的优雅有些主观。你的代码易于阅读/理解,并且是解决给定问题的最有效方法。当然,有一些方法可以用更少的字节编写您的代码,但它们可能不像您的代码那样易读,因此我不会称它们为更加优雅。如果您正在寻找更快的解决分配的问题的方法,您已经实现了该问题的最佳复杂度O(n)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接