Python 避免无意中删除基于列表理解的快速排序中的重复项?
我是Python新手,了解到它还实现了列表理解,比如Haskell,我对它有一些经验。我试图编写一个Haskell式的Python 避免无意中删除基于列表理解的快速排序中的重复项?,python,duplicates,list-comprehension,quicksort,Python,Duplicates,List Comprehension,Quicksort,我是Python新手,了解到它还实现了列表理解,比如Haskell,我对它有一些经验。我试图编写一个Haskell式的快速排序函数它会对给定列表进行排序,但也会删除任何重复的元素;显然,这不是排序函数中通常需要的特性。为什么会发生这种情况?我如何修复它?(Python 3.6) def快速排序(未排序): “”“使用快速排序从最小到最大对列表进行数字排序。” """ 如果不是未排序: 返回[] 其他: 枢轴,*静止=未排序 lower_sorted=快速排序([a表示静止状态下的a,如果apiv
快速排序
函数它会对给定列表进行排序,但也会删除任何重复的元素;显然,这不是排序函数中通常需要的特性。为什么会发生这种情况?我如何修复它?(Python 3.6)
def快速排序(未排序):
“”“使用快速排序从最小到最大对列表进行数字排序。”
"""
如果不是未排序:
返回[]
其他:
枢轴,*静止=未排序
lower_sorted=快速排序([a表示静止状态下的a,如果apivot])
返回已排序的下\u+[枢轴]+已排序的上\u
其中一个条件(如果<下支轴或如果<上支轴
)必须包括相等性测试。其中一个条件(如果<下支轴或如果<上支轴
)必须包括相等性测试。什么是lower\u rest
和upper\u rest
和同名枢轴?我认为您忽略了a=pivot
的情况。在代码< >低级排序> 或<代码> UpPull排序中。假设下、上休息和枢轴是TyPOS,考虑当<代码> < <代码>等于<代码> PIVOT < /C>时会发生什么。对列表进行数字排序的内置函数?@Vincenzzochi它不适用于任何实际项目,否则我不会重新实现内置函数,我只是做了一个练习来开始习惯python,它是lower\u rest
和upper\u rest
和同名枢轴?我想你忽略了a=pivot
的情况。在代码< >低级排序> 或<代码> UpPull排序中。假设下、上休息和枢轴是TyPOS,考虑当<代码> < <代码>等于<代码> PIVOT < /C>时会发生什么。内置函数对列表进行数字排序?@Vincenzzochi它不适用于任何类型的实际项目,或者我不会重新实现内置函数,我只是作为练习来开始习惯python为什么?如果我返回的是连接在一起的下\u排序、pivot和上\u排序,为什么我需要在其中任何一个中包含pivot?这确实解决了问题,谢谢你,但我想我很难理解为什么。因为如果你有多份pivot
,其中只包括一份。为什么会这样?如果我返回的是连接在一起的下\u排序、pivot和上\u排序,为什么我需要在其中任何一个中包含pivot?这确实解决了问题,谢谢你,但我想我很难理解为什么。因为如果你有多份pivot
,则只包括其中一份。
def quicksort(unsorted):
"""Sorts a list least to greatest numerically using quicksort
"""
if not unsorted:
return []
else:
pivot, *rest = unsorted
lower_sorted = quicksort([a for a in rest if a < pivot])
upper_sorted = quicksort([a for a in rest if a > pivot])
return lower_sorted + [pivot] + upper_sorted