Python 列表、字符串和快速排序
我正在使用快速排序来整理我的列表。列表中的数字格式如下:Python 列表、字符串和快速排序,python,python-2.7,quicksort,Python,Python 2.7,Quicksort,我正在使用快速排序来整理我的列表。列表中的数字格式如下: 1999.03,0.9 2000.08,0.1 1988.1,0.8 小数点前的数字是年,小数点后的数字是月。逗号后的数字是价格。我的快速排序使他们的秩序,但它下降的价格后,我这样做,我不知道为什么。我是python新手,所以我可能不是用最好的方式来做这件事,但我仍然希望有人能告诉我为什么这不起作用 def quick_sort(arr): if arr == []: return [] else:
1999.03,0.9
2000.08,0.1
1988.1,0.8
小数点前的数字是年,小数点后的数字是月。逗号后的数字是价格。我的快速排序使他们的秩序,但它下降的价格后,我这样做,我不知道为什么。我是python新手,所以我可能不是用最好的方式来做这件事,但我仍然希望有人能告诉我为什么这不起作用
def quick_sort(arr):
if arr == []:
return []
else:
element = arr[len(arr)/2]
pivot = float(element[0:7])
lesser = quick_sort([x for x in arr[1:] if float(x[0:7]) < pivot])
greater = quick_sort([x for x in arr[1:] if float(x[0:7]) >= pivot])
return lesser + [pivot] + greater
我假设它是quicksort递归调用中的语法,但是我对python了解不够,无法发现它 切割枢轴以将其与其他切割进行比较。就在这里,你放下这个角色。您必须保留整个元素:
element = arr[len(arr) / 2]
pivot = float(element[:7])
因此,您可以与变量pivot
进行比较,并使用元素部分构建结果列表
结果的构建是通过以下方式完成的:
return lesser + [element] + greater
“我用快速排序来整理我的列表。”为什么不把它留给Timsort?我是Python的新手,想尝试让一些东西在C++中完成。这个练习是为了帮助我学习python,而不是以最有效的方式实现项目。如果不是因为OP是一个Python新手,我建议使用collections.namedtuple
来跟踪它arr=[your,existing,array]
,“array\u element=namedtuple”(“array\u element”,“data”,“sort\u info”])
,new\u arr=[array\u element(el,float(el[:7])for el in arr]
,然后运行快速排序
返回[el.sort\u info=pivot.sort\U info,则新阵列中el的el.data]
2在本例中,命名变量比namedtuple更具可读性。整个函数中有4个变量。namedtuple用于表示不同调用之间的半复杂状态。这里只有一个简短的例子function@TurplF:坦白:我最近刚刚了解了namedtuple,现在我已经尽我所能地使用它了。Cooordinate=namedtuple(data=['x','y'])
是一个常见的:)。我已经成为那种“当你只有一把锤子时,你看到的一切都是钉子。”“编码器。帮帮我!@AdamSmith:这种用法很好,因为您可以在不同的上下文/函数/processus/something之间传递您的位置,并且它正确地打包了对数据的命名引用。在只有一个上下文的情况下,它是无用的。@AdamSmith我将元素放在轴之前,但它没有更改输出
return lesser + [element] + greater