私はプログラミングに全く新しいものではありませんが、私はPythonには初めてです。 Haskellの経験があり、Pythonもリスト内包を実装していることを知っているので、私はHaskell-eskクイックソート関数を記述しようとしました。Python - 意図しないリストの理解で重複を取り除く
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にあります。
「lower_rest」と「upper_rest」とは何ですか、名前がピボットしますか? – DyZ
私はあなたが 'a =ピボット'の場合を見落としていると思います。これを 'lower_sorted'または' upper_sorted'のいずれかで考慮する必要があります。 –
下部と上部のrestとpivotがタイプミスであると仮定すると、 'a'が' pivot'に等しいときに何が起こるかを考えます。 –