无限循环和数组旋转

时间:2017-04-01 22:45:13

标签: python arrays algorithm loops for-loop

所以我有这个清单,

列表: [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]?< / p>

我正在尝试在python上创建它。

3 个答案:

答案 0 :(得分:1)

我相信你对旋转阵列的询问,如果这不是你的意思,只需评论。

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))

答案 1 :(得分:0)

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

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))

答案 2 :(得分:-1)

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