【问题标题】:How to quicksort a nested list. [duplicate]如何快速排序嵌套列表。 [复制]
【发布时间】:2017-10-10 01:41:00
【问题描述】:

我不确定如何将快速排序算法实现到嵌套列表中。如果我有这样的清单:

L = [['James', '1', '2'], ['Alan', '1', '1'], ['Henry', '1', '5']]

我想根据每个子列表中的最后一个数字对其进行排序。

输出:

final = [['Henry', '1', '5'], ['James', '1', '2'], ['Alan', '1', '1']]

【问题讨论】:

  • 那么到目前为止你尝试过什么?
  • 我所能做的就是使用有效的排序功能。但我想试试快速排序算法。
  • 那请先试一试。带着问题来。
  • 我建议你先尝试在一个简单的列表上实现快速排序算法。一旦你掌握了这个概念,对比较的改变应该是很明显的。

标签: python list nested quicksort


【解决方案1】:

我从这个问题Quicksort with Python 中找到了一个算法实现。只需重新定义比较函数:

L = [['James', '1', '2'], ['Alan', '1', '1'], ['Henry', '1', '5']]

less_than = lambda x, y: x[2] < y[2]
more_than = lambda x, y: x[2] >= y[2]

def qsort(arr):
    if len(arr) <= 1:
        return arr
    else:
        return qsort([x for x in arr[1:] if less_than(x, arr[0])]) + [arr[0]] + qsort([x for x in arr[1:] if more_than(x, arr[0])])


print(qsort(L))

输出:

[['Alan', '1', '1'], ['James', '1', '2'], ['Henry', '1', '5']]

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 2021-07-14
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多