避免无意中删除基于列表理解的快速排序中的重复项?
Avoid unintentionally removing duplicates in list comprehension-based quicksort?
我是 Python 的新手,了解到它还实现了列表理解,例如 Haskell,我对此有一些经验。我试图编写一个 Haskell 风格的 quicksort
函数。 它确实对给定的列表进行了排序,但也删除了任何重复的元素;显然,这不是排序功能中通常需要的功能。为什么会发生这种情况,我该如何解决? (Python 3.6)
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
其中一个条件(if a < lower_pivot
或 if a > upper_pivot
)必须包含相等性测试。
我是 Python 的新手,了解到它还实现了列表理解,例如 Haskell,我对此有一些经验。我试图编写一个 Haskell 风格的 quicksort
函数。 它确实对给定的列表进行了排序,但也删除了任何重复的元素;显然,这不是排序功能中通常需要的功能。为什么会发生这种情况,我该如何解决? (Python 3.6)
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
其中一个条件(if a < lower_pivot
或 if a > upper_pivot
)必须包含相等性测试。