根据较长列表的顺序对短列表进行排序
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排序进阶版:根据一个列表的顺序对其他列表进行排序