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