【发布时间】:2017-01-10 17:53:06
【问题描述】:
这是我在 Python 中的快速排序实现:
def quicksort(alist):
if len(alist) <= 1:
return alist
else:
pivot = alist[len(alist)//2]
alist.remove(pivot)
alist1, alist2 = partition(alist, pivot)
return quicksort(alist1) + [pivot] + quicksort(alist2)
def partition(alist, pivot):
alist1 = []
alist2 = []
for e in alist:
if e <= pivot:
alist1.append(e)
else:
alist2.append(e)
return (alist1, alist2)
此实现工作正常。但是看看第 6 行和第 7 行,它们分别是 alist.remove(pivot) 和 alist1, alist2 = partition(alist, pivot)。如果我尝试通过如下重写第 7 行将这两行合并为一行代码:alist1, alist2 = partition(alist.remove(pivot), pivot),那么我的代码不起作用。我收到以下类型错误:
TypeError: 'NoneType' object is not iterable
想知道我为什么会遇到这个错误?
【问题讨论】:
-
顺便说一句,
remove行完全没用,并且使代码大大变慢。重写partition以排除枢轴。
标签: python function methods quicksort