【发布时间】:2019-01-23 18:58:16
【问题描述】:
如果arr = [4,3,2,1] 并且我想用数组的最小值交换第一个值,如果我在 python 上使用它
arr[0] , arr[arr.index(min(arr))] = min(arr) , arr[0]
#or
arr[0] , arr[arr.index(min(arr))] = arr[arr.index(min(arr))] , arr[0]
他们不工作,但如果我这样做
b = arr.index(min(arr))
#and then
arr[0] , arr[b] = arr[b] , arr[0]
这很好用。谁能解释一下为什么?
【问题讨论】:
-
@smci:除了这里实际上不是从左到右。它本来可以设计成从左到右的,但事实并非如此。 (我真的希望 Python 多重赋值被设计为从左到右评估所有表达式,然后开始赋值。)
-
@user2357112:那么请解释一下它是什么。它从左到右解析,然后动态评估每个表达式,是吗?对于元组赋值
L1, L2 = R1, R2,首先计算 L1,然后是 R1,然后是 L2,然后是 R2? -
@smci:不。 R1,R2,L1,(第一次赋值在这里),L2,(第二次赋值在这里)。
-
@smci:较早的答案提到了作业的例外情况,但很容易错过。我已经对其进行了编辑,使其更加清晰。
标签: python arrays python-3.x list operator-precedence