【问题标题】:Error while swapping elements in a python list using simultaneous assignment使用同时分配交换python列表中的元素时出错
【发布时间】:2019-07-24 11:13:03
【问题描述】:

我需要交换 Python 列表中的元素。它在我使用临时变量来处理交换时有效,但当我以 Python 风格(即a, b = b, a)执行相同操作时似乎不起作用。

假设我们正在处理的索引是i = 1。我正在尝试在A[i] and A[A[i]] 处交换元素。

输入 A = [2,3,4,5,6,7,8,9] 预期输出 = [2,5,4,3,6,7,8,9]

首先我尝试了pythonic方式。没有得到预期的输出。

>>> i = 1
>>> A = [2,3,4,5,6,7,8,9]
>>> A[i], A[A[i]] = A[A[i]], A[i]
>>> A
[2, 5, 4, 5, 6, 3, 8, 9]

非pythonic方式有效。

>>> i = 1
>>> B = [2,3,4,5,6,7,8,9]
>>> temp = B[B[i]]
>>> B[B[i]] = B[i]
>>> B[i] = temp
>>> B
[2, 5, 4, 3, 6, 7, 8, 9]

我只是想知道为什么会这样以及何时应该避免使用同时分配。

【问题讨论】:

标签: python swap


【解决方案1】:

这是因为代码是在过程中而不是之后分配的,所以如果你做相反的顺序:

A[A[i]], A[i] = A[i], A[A[i]]

第 3 个元素会修复,但第 5 个元素会出错。

【讨论】:

    【解决方案2】:

    A[i] = A[A[i]] 被执行时,这意味着 3 (wiz. on 1 pos) 现在是 5,A[A[i]] = A[i],记住,这里 LHS 上的 A[i] 已经是 5,而在索引 5 上它也是 7因此索引 3 未被触及。

    修改代码有点像上面的答案,

    A[A[i]], A[i] = A[i], A[A[i]]
    

    会做一些保留索引的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2020-11-23
      相关资源
      最近更新 更多