python - 按列快速排序列表
问题描述
我想快速排序我通过熊猫从 csv 生成的列表列表。我想按特定列对其进行排序,例如数字或高度。
数据如下所示:
数字 | 姓名 | 高度 | 宽度 | 重量 |
---|---|---|---|---|
1 | 仇恨 | 66.23 | 57.28 | 124.87 |
2 | 恶毒 | 22.56 | 843.7 | 123.67 |
3 | 阿育王 | 45.66 | 234.3 | 523.29 |
我已经能够使用以下代码按第二列对其进行排序:
def quickSort(list):
if not list:
return list
pivot = list[0]
lesser = quickSort([x for x in list[1:] if x[1] < pivot[1]])
greater = quickSort([x for x in list[1:] if x[1] >= pivot[1]])
return lesser + [pivot] + greater
print(quickSort(product_list))
这适用于按名称排序。但我不知道要更改什么以按任何其他列排序。如果有人可以帮助我,那就太好了。
解决方案
product_list = [[1,10],[3,8],[2,9]]
def quickSort(list, compare_fn):
if not list:
return list
pivot = list[0]
lesser = quickSort([x for x in list[1:] if compare_fn(x, pivot)], compare_fn)
greater = quickSort([x for x in list[1:] if not compare_fn(x, pivot)], compare_fn)
return lesser + [pivot] + greater
print(quickSort(product_list, lambda x,y: x[0] < y[0]))
推荐阅读
- ios - UiPickerView 在模拟器中运行时移动到原点
- java - 替换与 arrayList 中的键匹配的字符串的多个部分
- javascript - 尝试用“let”替换“var”时未捕获的 TypeError
- javascript - 如何编写嵌套的 v-for 循环以显示所有元素?
- c++ - 恒定时间码
- php - 仅知道位置和结构时替换子字符串
- python - 如何使用变量对数组进行切片和迭代?
- laravel - Laravel 写入文件流
- java - SQL没有将文件内容添加到表中
- android-studio - Android Studio Gradle:如何在自定义资产处理器任务中获得变体/风味