I';我试图在python中围绕给定的索引旋转数组

I';我试图在python中围绕给定的索引旋转数组,python,arrays,cyclic,Python,Arrays,Cyclic,案例1: 当我像这样交换数组元素时。我得到了这个输出 a=[1,2,3,4,5] index k=2 a[:k],a[k:]=a[k:],a[:k] 案例2: **OUTPUT:[3, 4, 1, 2] 但是当我像这样交换数组元素时,我得到了这个。唯一的区别是交换的顺序 b=[1,2,3,4,5] b[k:],b[:k]=b[:k],b[k:] 如果我们交换两个变量,交换的顺序没有什么区别。 i、 ea,b=b,a与b,a=a,b相同 为什么这在列表/数组的情况下不起作用?在完成任何分配之

案例1:

当我像这样交换数组元素时。我得到了这个输出

a=[1,2,3,4,5]
index k=2
a[:k],a[k:]=a[k:],a[:k]
案例2:

**OUTPUT:[3, 4, 1, 2]
但是当我像这样交换数组元素时,我得到了这个。唯一的区别是交换的顺序

b=[1,2,3,4,5]
b[k:],b[:k]=b[:k],b[k:]
如果我们交换两个变量,交换的顺序没有什么区别。 i、 e
a,b=b,a
b,a=a,b
相同

为什么这在列表/数组的情况下不起作用?

在完成任何分配之前,请先查看右侧。随后,按从左到右的顺序执行分配

因此,第一个案例的评估结果是:

OUTPUT:[3, 4, 5, 1, 2]
第一个赋值将前两个元素
[1,2]
替换为三个元素
[3,4,5]
,因此现在我们有
a==[3,4,5,3,4,5]
。然后,第二个赋值将元素2替换为
[1,2]
,因此结果是
a==[3,4,1,2]

在第二种情况下,我们有:

a[:2], a[2:] = [3, 4, 5], [1, 2]
第一个赋值从元素2开始替换为
[1,2]
,结果是
b==[1,2,1,2]
。第二个赋值将前两个元素替换为
[3,4,5]
,给出
b=[3,4,5,1,2]

到目前为止,您可能已经注意到这是一个相当棘手的问题,有时主要是出于偶然,因此我建议将整个过程简化为:

b[2:], b[:2] = [1, 2], [3, 4, 5]

如果你交换两个变量,这两个变量之间没有关系,那么ok。 您可以找到以下步骤:

>a=[1,2,3,4,5]
>>>k=2
>>>#a[:k],a[k:]=a[k:],a[:k]
>>>x,y=a[k:],a[:k]
>>>a[:k]=x
>>>x,a
([3, 4, 5], [3, 4, 5, 3, 4, 5])
>>>a[k:]=y
>>>y,a
([1, 2], [3, 4, 1, 2])

左侧变量或切片从右侧元组从左到右赋值。如果第一个任务改变了列表中的索引,这会影响第二个。我们考虑一下
a[:k],a[k:]=a[k:],a[:k]
的步骤。如果你决心让ik工作(并挫败你的同事),你可以做
a[:k],a[len(a)//2:=a[k:],a[:k]
a[:] = a[k:] + a[:k]