首页 > 解决方案 > 尝试创建一个快速排序功能来更改原始列表,但它不会对其进行任何更改

问题描述

这是代码。顺便说一句,我不确定为什么它仍然是初学者:

def quick_sort(L):
  if len(L)>1:
    L1=[]
    L2=[]
    for i in range(1,len(L)):
      if L[i]<=L[0]:
        L1.append(L[i])
      elif L[i]>=L[0]:
        L2.append(L[i])
    quick_sort(L1)
    quick_sort(L2)
    L=L1+[L[0]]+L2

我什至尝试使用下面的代码只做第一步,但列表不会改变:

def quick_sort(L):
  if len(L)>1:
    L1=[]
    L2=[]
    for i in range(1,len(L)):
      if L[i]<=L[0]:
        L1.append(L[i])
      elif L[i]>=L[0]:
        L2.append(L[i])
    L=L1+[L[0]]+L2

标签: pythonrecursionquicksort

解决方案


您必须更改L=L1+[L[0]]+L2L[:]=L1+[L[0]]+L2

当您为 分配值时L,它只会重新绑定名称,但 usingL[:]将替换列表中先前的名称。


推荐阅读