首页 > 解决方案 > 如何根据任意顺序对列表进行排序

问题描述

我搜索了一个相关问题,但找不到。所以我的问题是如何根据任意顺序对数组进行排序。例如,假设排序是:

order_of_elements = ['cc', 'zz', '4b', '13']

和我要排序的列表:

list_to_be_sorted = ['4b', '4b', 'zz', 'cc', '13', 'cc', 'zz']

所以结果需要是:

ordered_list = ['cc', 'cc', 'zz', 'zz', '4b', '4b', '13']

请注意,参考列表(order_of_elements)描述了排序,我不询问是否根据参考列表的字母顺序索引进行排序。

您可以假设order_of_elements数组包含所有可能的元素。

欢迎任何伪代码。

标签: algorithmsorting

解决方案


完成此操作的一种简单且 Pythonic 的方法是计算order_of_elements数组的索引查找表,并将索引用作排序键:

order_index_table = { item: idx for idx, item in enumerate(order_of_elements) }
ordered_list = sorted(list_to_be_sorted, key=lambda x: order_index_table[x])

该表将订单查找减少到O(1)(摊销),因此不会改变排序的时间复杂度。

(当然,它确实假设 中的所有元素list_to_be_sorted都存在于 中order_of_elements;如果不一定是这种情况,那么您将需要键 lambda 中的默认返回值。)


推荐阅读