I';我试图在python中围绕给定的索引旋转数组
案例1: 当我像这样交换数组元素时。我得到了这个输出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相同 为什么这在列表/数组的情况下不起作用?在完成任何分配之
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
相同
为什么这在列表/数组的情况下不起作用?在完成任何分配之前,请先查看右侧。随后,按从左到右的顺序执行分配
因此,第一个案例的评估结果是:
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]