【问题标题】:Python Swap Issue [duplicate]Python交换问题[重复]
【发布时间】:2021-11-26 07:41:54
【问题描述】:

只是想知道我跑步时会发生什么

nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i] 在python3中。

我知道当我喜欢它时它会起作用 x = nums[i] - 1 nums[i], nums[x] = nums[x], nums[i] 但还是不知道到底发生了什么。

【问题讨论】:

标签: python swap


【解决方案1】:
  • 要正确使用此交换元素
nums=[4,8,3,7,5]
print('before',nums)
i=3
nums[i], nums[i - 1] = nums[i - 1], nums[i]
print('after',nums)
before [4, 8, 3, 7, 5]
after [4, 8, 7, 3, 5]
  • 要了解您的代码为何不起作用,请参阅以下代码

代码将从最右向左执行

nums=[4,8,7,3,5]
i=3

>nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
>nums[i], nums[nums[i] - 1] = nums[3 - 1], 3
>nums[i], nums[nums[i] - 1] = nums[2], 3
>nums[i], nums[nums[i] - 1] = 7, 3

#first element
>nums[i] ----> 7
>nums[3] ----> 7
>nums=[4,8,7,7,5]

#second element
>nums[nums[i] - 1] ---> 3
>nums[nums[3] - 1] ---> 3 #nums[3] became 7 
>nums[7 - 1] ---> 3
>nums[6] ---> 3  #index out of range

【讨论】:

    【解决方案2】:

    Python 规则非常具体。

    在评估a = b = c = ... = z时,先评估右侧,然后赋值,依次为a,然后是b,然后是c,...

    当给普通元组赋值时,赋值的值必须与被赋值的元组长度相同。第一个值分配给元组的第一部分,然后第二个值分配给元组的第二部分,依此类推。

    在这两个规则之间,上面代码中发生的事情是很清楚的。这些步骤按顺序进行:

    1. 评估右侧。
    2. 结果元组的第一部分分配给左侧的第一部分
    3. 结果元组的第二部分分配给左侧的第二部分。

    【讨论】:

      猜你喜欢
      • 2020-10-06
      • 2021-06-09
      • 1970-01-01
      • 2013-02-02
      • 2010-11-08
      • 1970-01-01
      • 2019-04-15
      • 2011-10-18
      • 2021-05-21
      相关资源
      最近更新 更多