Python - 无意中删除列表解析中的重复项

时间:2017-01-28 03:23:47

标签: python list-comprehension quicksort

虽然我不是全新的编程,但我是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。

1 个答案:

答案 0 :(得分:5)

其中一个条件(if a < lower_pivotif a > upper_pivot)必须包含相等测试。