Python 避免无意中删除基于列表理解的快速排序中的重复项?

Python 避免无意中删除基于列表理解的快速排序中的重复项?,python,duplicates,list-comprehension,quicksort,Python,Duplicates,List Comprehension,Quicksort,我是Python新手,了解到它还实现了列表理解,比如Haskell,我对它有一些经验。我试图编写一个Haskell式的快速排序函数它会对给定列表进行排序,但也会删除任何重复的元素;显然,这不是排序函数中通常需要的特性。为什么会发生这种情况?我如何修复它?(Python 3.6) def快速排序(未排序): “”“使用快速排序从最小到最大对列表进行数字排序。” """ 如果不是未排序: 返回[] 其他: 枢轴,*静止=未排序 lower_sorted=快速排序([a表示静止状态下的a,如果apiv

我是Python新手,了解到它还实现了列表理解,比如Haskell,我对它有一些经验。我试图编写一个Haskell式的
快速排序
函数它会对给定列表进行排序,但也会删除任何重复的元素;显然,这不是排序函数中通常需要的特性。为什么会发生这种情况?我如何修复它?(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