虽然我不是全新的编程,但我是python的新手。有一些Haskell的经验并且学习python也实现了列表推导,我试图编写一个Haskell-esk快速排序函数。
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
它对给定的列表进行排序,但这样做会删除任何重复的元素;显然,这不是排序功能中通常需要的功能。关于为什么会发生这种情况的任何想法,以及我如何解决这个问题(或者我错过的任何其他明显问题)?这是Python 3.6.0。
答案 0 :(得分:5)
其中一个条件(if a < lower_pivot
或if a > upper_pivot
)必须包含相等测试。