gpt4 book ai didi

python - 如何将数组中的项目移动 "K"次?

转载 作者:行者123 更新时间:2023-12-01 23:08:09 25 4
gpt4 key购买 nike

将给定数组中的项目移动一定次数,如下例所示;

array = [1, 2 ,3 , 4, 5, 6]
k1 = 2
k2 = -3
k3 = 20

test1:
cirShift(array, k1)
Result: [5, 6, 1, 2, 3, 4]

test2:
cirShift(array, k2)
Result: [4, 5, 6, 1, 2, 3]

test3:
cirShift(array, k3)
Result: [5, 6, 1, 2, 3, 4]

我已经使用下面的代码实现了将列表向右旋转 k 个位置;

def rightRotateByOne(A):
Fin= A[-1]
for i in reversed(range(len(A) - 1)):
A[i + 1] = A[i]
A[0] = Fin

def rightRotate(A, k):
if k < 0 or k >= len(A):
return
for i in range(k):
rightRotateByOne(A)

if __name__ == '__main__':
A = [1, 2, 3, 4, 5, 6, 7]
k = 3
rightRotate(A, k)
print(A)

截至目前,能够获得test1的结果,但想获得test2test3

最佳答案

更简单的是,根据边界将数组分成两半,交换并粘合回去:

def cirShift(a, shift):
if not shift or not a:
return a
return a[-shift%len(a):] + a[:-shift%len(a)]

由@KellyBundy 提供,一种短路单线:

def cirShift(a, shift):
return a and a[-shift%len(a):] + a[:-shift%len(a)]

关于python - 如何将数组中的项目移动 "K"次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70430629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com