根据较长列表的顺序对短列表进行排序

Posted

技术标签:

【中文标题】根据较长列表的顺序对短列表进行排序【英文标题】: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']

【问题讨论】:

类似sorted(B, key=A.index)? 好吧,你去吧;您应该将其发布为答案,我会接受。 ***.com/a/27573462/12671057 【参考方案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']

【讨论】:

以上是关于根据较长列表的顺序对短列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Python排序进阶版:根据一个列表的顺序对其他列表进行排序

Python排序进阶版:根据一个列表的顺序对其他列表进行排序

Python排序进阶版:根据一个列表的顺序对其他列表进行排序

如何根据自定义所需顺序对包含列表的数组列表进行排序

如何根据另一个列表中元组元素的顺序对元组列表进行排序?

根据子列表中的第二个元素按字母顺序对列表进行排序,但不区分大小写[重复]