首页 > 解决方案 > 列表值交换:正确的顺序是什么,为什么?

问题描述

对于整数列表,例如A = [2, 10, -5],我得到错误

Traceback (most recent call last):
  File "so.py", line 6, in <module>
    v, A[v-1] = A[v-1], v
IndexError: list assignment index out of range

代码:

for i, v in enumerate(A):
    while 1<=v<=len(A) and v != A[v-1]:
        v, A[v-1] = A[v-1], v

但这有效:

for i, v in enumerate(A):
    while 1<=v<=len(A) and v != A[v-1]:
        A[v-1], v = v, A[v-1]

为什么交换元素的顺序在这里很重要?v总是被检查是否有界。

奇怪的是不能重现一个更小的例子。但是, A = [6, 5, 4, 3, 2] 变成了一个无限循环。

标签: python

解决方案


Python 按提供的顺序交换变量,因此v在 处分配值A[v-1],然后尝试重新分配A[v-1]- 但由于 v 已被修改为列表元素,v-1因此超出了A.


推荐阅读