【问题标题】:Infinite Loop and Rotation of Array [duplicate]数组的无限循环和旋转[重复]
【发布时间】:2017-08-27 00:46:55
【问题描述】:

所以我有这份清单,

列表: [0, 0, 1, 0, 1];

我需要用for 制作一个算法来显示所有列表(list[i])。

当我在第一个数组位置时,我可以list[i-2] and list[i-1],这样我可以看到最后一个位置的元素和最后一个位置之前的位置。

示例: list[0] = 0; list[i-1] = list[4] = 1; list[i-2] = list[3] = 0; 这样我就可以转到最后一个位置并从那里开始。

但是当我这样做时,list[i+1] 在最后一个位置我从终端收到 IndexError: list index out of range

我的问题是:如果我在最后一个位置,我想再次从第一个位置开始并继续执行 for 循环,以无限次查看所有位置的所有数组元素,如何我能做到? 如果我的数组的大小是 5,并且我在循环中处于第二位(list[1])并且想做list[i + 11],我怎么能把它代表这个,list[2]

我正在尝试在 python 上做这个。

【问题讨论】:

  • 你想要list[i%len(i)]这样的东西吗?
  • 哈,错过了查找部分。他们应该使用模数包装。但如果他们愿意,他们可以在islicecycle 中加入
  • @MosesKoledoye 这不会再次出现在数组的开头:s 它只是一个内部数组功能。
  • 我不知道你想问什么,而且看起来其他人也没有一个明确的想法。
  • 我很高兴听到您可以使用提供的链接中的方法来做到这一点。

标签: python arrays algorithm loops for-loop


【解决方案1】:

您可以使用模运算符来实现此目的,该运算符返回两个操作数相除的余数。在这种情况下,您将执行以下操作:list[i%num_of_elements],其中 num_of_elements 是一个保存列表中元素数量的变量。

【讨论】:

    【解决方案2】:

    我相信您询问有关旋转数组的问题,如果这不是您的意思,请发表评论。

    def rotateLeft(li):
        return li[1:] + [li[0]]
    
    def rotateRight(li):
        return [li[len(li)-1]] + li[:len(li)-1]
    
    li = [1,2,3,4,5]
    
    print (rotateLeft(li))
    print (rotateRight(li))
    

    【讨论】:

    • rotateRight(li) 可以简化为return [li[-1]] + li[:-1]
    • 或者,rotateLeft() 的更高效版本可能是li.append(li.pop(0))(虽然我不知道它在 python 内部是如何工作的)。
    【解决方案3】:

    您可以如下实现这样的“无限迭代器”:

    def infinite_iterator(lst):    
        i = 0
        def next():        
            global i
            while True:
                result = lst[i % len(lst)]
                i += 1
                yield result
        return next()
    

    并将其用于:

    lst = [1,2,3,4,5]    
    iter = infinite_iterator(lst)
    
    for i in range(17): # 17 is just an example, you can put any number or `while True:` 
        print(next(iter))
    

    【讨论】:

    • 谢谢你!这正是我想要找到的。谢谢!
    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2020-01-19
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多