我想要一份列表的副本,然后对其进行排序,但由于 python 的工作方式,如果我对列表的副本进行排序,它也会对原始列表进行排序。这是我的代码:def swapBySoting(arr): newArr = arr newArr.sort() swap = 0 for i in range(len(arr)): if arr[i] != newArr[i]: swap +=1 return int(swap / 2)我只需要知道如何将副本存储在内存的另一个引用中,以仅对副本进行排序。谢谢
1 回答
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
赋值只是创建对象的新别名,它不执行复制。您有两个简单的解决方案:
list
分配给第二个时浅复制第一个:newArr = arr[:] # Or arr.copy()
将您的副本和排序合并到内置的一个步骤中
sorted
(创建一个新的list
,对其进行排序,然后返回新的list
):newArr = sorted(arr) # No need to call .sort() afterwards
旁注:对于比较元素,循环索引相对较慢且不符合Python风格。使用zip
和解包到有用的名称会变得更好(而且更快):
for old, new in zip(arr, newArr): if old != new: swap +=1
也就是说,这种计算最小交换的算法几乎肯定是错误的,但这完全是另一个问题。
添加回答
举报
0/150
提交
取消