python - 列表值交换:正确的顺序是什么,为什么?
问题描述
对于整数列表,例如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 按提供的顺序交换变量,因此v
在 处分配值A[v-1]
,然后尝试重新分配A[v-1]
- 但由于 v 已被修改为列表元素,v-1
因此超出了A
.
推荐阅读
- android - 使用线圈库 - imageView.draw(canvas) - 软件渲染不支持硬件位图
- python - 过滤列和排名熊猫
- reactjs - 如何在 Formik 中使用多组单选按钮
- video - 将倒数计时器添加到 twillio 视频室
- django - django 的两个唯一字段的自定义验证错误
- apache-spark - 如何在 Pyspark 中有效地连接一个非常大的表和一个大表
- html - Bootstrap 留下的额外空间
- bash - Bash 不会在当前会话中保留导出变量和别名。你知道如何开始调查这个吗?
- c# - 需要帮助 - 从 WebMethod (ASP.NET) C# 调用时,MasterPage 始终返回 null
- google-sheets - 已解决的错误:谷歌表格中导入的内容为空