【问题标题】:Circular Iterator in PythonPython中的循环迭代器
【发布时间】:2016-01-02 17:55:38
【问题描述】:

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

给定:

[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 但这是一个无限循环。我必须使用下一个方法来获取并停在正确的位置。 Circular list iterator in Python

【问题讨论】:

  • 你可以用data[startPosition:] + data[:startPosition]代替

标签: python


【解决方案1】:

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

from collections import deque

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 2015-04-21
      • 1970-01-01
      • 2012-06-27
      • 2023-03-05
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      相关资源
      最近更新 更多