【问题标题】:Sorting a short list according to the order of a longer list根据较长列表的顺序对短列表进行排序
【发布时间】:2022-01-02 06:12:26
【问题描述】:

假设我有一个参考列表:

A = ['X_0', 'Z_0', 'X_1', 'Y_0', 'Z_1', 'X_2', 'Y_1', 'Z_2', 'Y_2']

以及一个(示例)较短的列表:

B = ['Z_0', 'X_1', 'X_0']

如何对B 进行排序,以使元素的顺序与A 中提供的顺序相匹配?因此,最终结果应该与A 的顺序相匹配,如下所示:

B_final = ['X_0', 'Z_0', 'X_1']

【问题讨论】:

标签: python-3.x sorting


【解决方案1】:

您希望列表 B 按 A 中值的索引排序,所以;

sorted(B, key=A.index)

这将按 A 中的每个值索引对 B 进行排序。

如果您使用的是一个很长的列表,索引效率不是很高,因为它会在列表中搜索每个值,因此您可能希望改为按字典排序。

首先创建列表索引值的字典;

>>> C = {val:ix for ix,val in enumerate(A)}

...然后按字典值排序,比在列表中线性搜索效率高很多;

>>> sorted(B, key=C.get)
['X_0', 'Z_0', 'X_1']

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 2020-03-15
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2022-11-16
    • 2015-01-08
    • 2013-07-31
    • 2011-04-03
    相关资源
    最近更新 更多