我正在尝试围绕python中的给定索引旋转数组

情况1:

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

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

**OUTPUT:[3,1,2]

情况2:

b=[1,5]
b[k:],b[:k]=b[:k],b[k:]

但是当我像这样交换数组元素时,我得到了。唯一的区别是交换顺序。

OUTPUT:[3,5,2]

如果我们交换两个变量,那么交换的顺序没有什么不同。 即a,b=b,ab,a=a,b相同。

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

iCMS 回答:我正在尝试围绕python中的给定索引旋转数组

完成任何赋值之前,在右侧is evaluated fully上。随后,以从左到右的顺序执行分配。

因此第一种情况的计算结果为:

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

第一个赋值将前两个元素[1,2]替换为三个元素[3,5],所以现在有了a == [3,5,3,5]。第二个赋值然后用[1,2]替换元素2,因此得到a == [3,1,2]

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

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

第一个分配从元素2开始用[1,2]替换为b == [1,2,2]。第二个赋值用[3,5]替换前两个元素,得到b == [3,2]

您现在可能已经注意到,考虑这一点非常棘手,有时大多数情况下是偶然的,所以我建议将整个过程简化为:

a[:] = a[k:] + a[:k]
,

如果交换两个变量,则两个变量之间没有关系,然后确定。 您可以找到以下步骤:

4f0cdea85c8a2b849fd582ccc8497892001d06b0
本文链接:https://www.f2er.com/1992406.html

大家都在问