2 回答

TA贡献1840条经验 获得超5个赞
当您正在执行asc = arr并且des = arr未创建新列表时。asc,des并且arr链接到一个列表对象,所以当你改变它们中的任何一个时,所有变量都将被更改,因为它是单个对象。
In [1]: a = [1, 2]
In [2]: b = a
In [3]: id(a), id(b)
Out[3]: (140601802913048, 140601802913048)
In [4]: b = a[:]
In [5]: id(a), id(b)
Out[5]: (140601802913048, 140601819243872)
如果你想要一份清单的副本,做
asc = arr[:]
des = arr[:]

TA贡献1871条经验 获得超8个赞
你需要做:
asc = arr.copy()
# or asc = arr[:]
否则,当arr反向排序时,asc也会发生变化。asc是一个指向数组的指针,当arr改变时,asc改变。更好的是,您创建 的副本arr,因此更改不会反映回来。
您编写的整个代码可以浓缩为这两行:
arr = [2,1,3,4,5]
print(sum(sorted(arr)[:4])) # 10
print(sum(sorted(arr, reverse=True)[:4])) # 14
# Or print(sum(sorted(arr)[-4:])) instead of the last print.
添加回答
举报