【问题标题】:very strange behavior when swap two elements in the list in python3 [duplicate]在python3中交换列表中的两个元素时非常奇怪的行为[重复]
【发布时间】:2019-09-03 17:46:36
【问题描述】:

我有一个清单

a = [-1,4,3,1]

我们有

a[1] = 4
a[3] = 1

现在我想交换 a[1]a[3]

以下代码运行良好:

a[1], a[3]  = a[3], a[1]

但如果我使用:

a[1], a[a[1]-1] = a[a[1]-1], a[1]

它给了我:

 a = [4,1,3,1]

答案不正确。既然我们知道a[1] - 1 = 3,这里会发生什么。有什么想法,谢谢。

【问题讨论】:

    标签: python-3.x list indexing swap


    【解决方案1】:

    这与Multiple assignment and evaluation order in Python 的问题基本相同,只是由于复杂的索引而产生了表面皱纹。

    这里要记住的事情:

    • 在完全评估左侧之前先完全评估右侧

    • 从左到右完全评估元组分配

    文档在此处(尽管很少)说明了这一点:https://docs.python.org/3/reference/expressions.html#evaluation-order

    Python 从左到右计算表达式。请注意,在评估分配时,右侧会先于左侧进行评估。

    我在这里说明适用于您的情况的这些规则:

    State of a Evaluation of expression Comment [-1, 4, 3, 1] a[1], a[a[1]-1] = a[a[1]-1], a[1] <start> [-1, 4, 3, 1] a[1], a[a[1]-1] = a[4-1], a[1] a[1] resolves to 4 [-1, 4, 3, 1] a[1], a[a[1]-1] = a[3], a[1] 4-1 is 3 [-1, 4, 3, 1] a[1], a[a[1]-1] = 1, a[1] a[3] resolves to 1 [-1, 4, 3, 1] a[1], a[a[1]-1] = 1, 4 a[1] resolves to 4 [-1, 1, 3, 1] a[a[1]-1] = 4 a[1] = 1 assigned [-1, 1, 3, 1] a[1-1] = 4 a[1] resolves to 1 [-1, 1, 3, 1] a[0] = 4 1-1 is 0 [4, 1, 3, 1] a[0] = 4 assigned

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 2021-11-25
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多