3

情况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]

如果我们交换两个变量,交换的顺序没有区别。即a,b=b,a与 相同b,a=a,b

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

4

2 回答 2

5

在完成任何分配之前,对右侧进行全面评估。随后,分配按从左到右的顺序执行。

所以第一种情况评估为:

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 开始替换[1, 2]b == [1, 2, 1, 2]. 第二个赋值用 替换前两个元素[3, 4, 5],给出b == [3, 4, 5, 1, 2]

您现在可能已经注意到,考虑这一点相当棘手,有时主要是偶然的,所以我建议将整个事情简化为:

a[:] = a[k:] + a[:k]
于 2020-07-06T09:45:18.230 回答
-1

如果交换两个变量,则两个变量之间没有关系,那就可以了。您可以找到以下步骤:

>>> 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])

于 2020-07-06T09:47:05.460 回答