我有一个列表,我需要将列表中的第一个元素与列表中的最大元素交换。
但为什么代码 1 可以工作,而代码 2 却不能:
code 1:
a = list.index(max(list))
list[0], list[a] = list[a], list[0]
code 2:
list[0], list[list.index(max(list))] = list[list.index(max(list))], list[0]
我认为Python会先评估右侧,然后再将其分配给左侧的名称?
Python 将结果存储在多个目标中左到右,按该顺序执行赋值目标表达式。
所以你的第二个版本基本上可以归结为:
temp = list[list.index(max(list))],list[0]
list[0] = temp[0]
list[list.index(max(list))] = temp[1]
请注意,list.index(max(list))
被执行after list[0]
被改变了,这就是你刚刚存储最大值的地方。
这记录在赋值语句文档:
- 如果目标列表是逗号分隔的目标列表:该对象必须是一个可迭代对象,其项目数与目标列表中的目标数相同,并且项目已分配,从左到右,到相应的目标。
从那时起,就好像每个目标都是单个目标,因此以下文档从左到右适用于每个目标:
将对象分配给单个目标的递归定义如下。
[...]
- 如果目标是订阅:将计算引用中的主要表达式。它应该产生一个可变序列对象(例如列表)或映射对象(例如字典)。接下来,计算下标表达式。
如果您更改了分配的顺序,您的代码将起作用:
list[list.index(max(list))], list[0] = list[0], list[list.index(max(list))]
因为现在list[list.index(max(list))]
被分配给first.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)