如何在python中多次迭代循环数组?

fkaflof6  于 2023-01-22  发布在  Python
关注(0)|答案(2)|浏览(172)

我想在数组中循环多次。当我到达最后一个索引时,下一个索引应该是第一个。例如,我有一个6个元素的数组

array1 = [1,2,3,4,5,6]

我有K = 4,K是我跳过的元素个数。
在上面的例子中,我将从array1[0]开始,跳过包括array1[0]元素在内的K个元素。因此,如果我跳过4个元素,我将到达array1[4]。如果我再跳过K个元素,我将跳过array1[4]、array1[5]、array1[0]和array1[1],到达array1[2]。这个过程将重复N次。
我试着在网上搜索解决方案,因为我想不出一种方法来在圆圈中移动数组。我找到了一个解决方案,上面说要像这样使用模运算符

print a[3 % len(a)]

但是我不能理解这一点,因为我刚刚开始使用Python。

yi0zb3m4

yi0zb3m41#

了解什么是模将是有帮助的https://en.wikipedia.org/wiki/Modulo
总而言之,在这个练习中,你不关心你遍历了数组多少次,你只关心"你在当前迭代的哪个位置",因此,使用数组长度作为模的模运算将给你这样的除法的余数,这正是你要寻找的。
示例:

arr = [1,2,3,4,5]
k = 27
arrlength = len(arr) # 5
reminder = k % arrlength # 27 % 5 = 2
arr[reminder] # 3
xxls0lw8

xxls0lw82#

因此,模运算符返回两个数相除的余数。
示例:

6 % 2 = 0 # because 6/2 = 3 with no remainder
6 % 5 = 1 # because 6/5 = 1 (integer part) plus remainder 1
6 % 7 = 6 # because 7 doesn't fit in 6, so all the dividend goes into the remainder

所以你的问题可以用这样的方法来解决:

arr = [1,2,3,4,5,6]
N = 5
step = 4

for i in range(5):
    print(arr[(i+1)*step%len(arr)])

其中N是要打印的元素数
这与创建扩展列表相同,例如:

b = arr * 1000

并打印range(step,(N+1)*step,step)中的每个元素,当然这个方法不是最优的,因为你不知道为了不超出边界,你需要连接多少个数组。
希望有帮助

相关问题