在以下链接http://en.literateprograms.org/Quicksort_%28Python%29中提出了以下声明。我们使用 pop 操作来删除我们选择的枢轴。这具有改变传递给排序函数的原始列表的不幸副作用。为什么它是一个不幸的副作用?即使我直接在下面调用 qsort 函数,我也会得到排序列表作为输出,因为我们有 return 语句。
from random import randrange
def qsort1a(list):
"""
Quicksort using list comprehensions and randomized pivot
>>> qsort1a<<docstring test numeric input>>
<<docstring test numeric output>>
>>> qsort1a<<docstring test string input>>
<<docstring test string output>>
"""
def qsort(list):
if list == []:
return []
else:
pivot = list.pop(randrange(len(list)))
lesser = qsort([l for l in list if l < pivot])
greater = qsort([l for l in list if l >= pivot])
return lesser + [pivot] + greater
return qsort(list[:])