为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这两个数组相同?

为什么这两个数组相同?

qq_花开花谢_0 2023-08-15 16:43:23
我想要一份列表的副本,然后对其进行排序,但由于 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个赞

赋值只是创建对象的新别名,它不执行复制。您有两个简单的解决方案:

  1. list分配给第二个时浅复制第一个:

    newArr = arr[:]  # Or arr.copy()
  2. 将您的副本和排序合并到内置的一个步骤中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

也就是说,这种计算最小交换的算法几乎肯定是错误的,但这完全是另一个问题。


查看完整回答
反对 回复 2023-08-15
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信