情况1:
a=[1,2,3,4,5]
index k=2
a[:k],a[k:]=a[k:],a[:k]
当我像这样交换数组元素时。我得到了这个输出。
**OUTPUT:[3, 4, 1, 2]
案例2:
b=[1,2,3,4,5]
b[k:],b[:k]=b[:k],b[k:]
但当我像这样交换数组元素时,我得到了这个。唯一的区别是交换的顺序。
OUTPUT:[3, 4, 5, 1, 2]
如果我们交换两个变量,交换的顺序不会有什么不同。即CCD_ 1与CCD_。
为什么这在列表/数组的情况下不起作用?
在完成任何赋值之前,都会对右手边进行充分评估。随后,按从左到右的顺序执行分配。
因此,第一种情况评估为:
a[:2], a[2:] = [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]
。
在第二种情况下,我们有:
b[2:], b[:2] = [1, 2], [3, 4, 5]
第一个赋值从元素2开始用CCD_ 8替换,得到CCD_。第二个赋值用a,b=b,a
0替换前两个元素,得到b == [3, 4, 5, 1, 2]
。
到目前为止,你可能已经注意到,这是一个很难思考的问题,有时主要是偶然发生的,所以我建议将整个事情简化为:
a[:] = a[k:] + a[:k]
如果交换两个变量,两个变量之间没有关系,那么好。您可以找到以下步骤:
>>> 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])