Хотя я не совсем новичок в программировании, я новичок в python. Имея некоторый опыт работы с Haskell и узнав, что python также реализует понимание списков, я попытался написать функцию quicksort 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 = pivot'. Вы должны рассмотреть это как в 'lower_sorted', так и' upper_sorted'. –
Предполагая, что нижний и верхний остальной и опорный точки являются опечатками, рассмотрите, что происходит, когда 'a' равно' pivot'. –