首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据另一个列表对列表进行排序?

如何根据另一个列表对列表进行排序?
EN

Stack Overflow用户
提问于 2019-12-25 16:16:58
回答 4查看 1.9K关注 0票数 27

我有两个列表,一个参考和一个输入列表。

代码语言:javascript
运行
复制
Ref = [3, 2, 1, 12, 11, 10, 9, 8, 7, 6, 5, 4]
Input = [9, 5, 2, 3, 10, 4, 11, 8]

我想按照参考文献的顺序对输入列表进行排序。如果输入列表中缺少某个元素,则可以跳过并转到另一个元素。

因此,基于参考列表的排序输入列表如下

代码语言:javascript
运行
复制
Sorted_Input = [3, 2, 11, 10, 9, 8, 5, 4]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-25 16:20:19

我认为这回答了你的问题:

代码语言:javascript
运行
复制
>>> [x for x in Ref if x in Input]
>>> [3, 2, 11, 10, 9, 8, 5, 4]

希望能帮上忙。

UPDATE:使Input成为更快访问的set

代码语言:javascript
运行
复制
>>> Input_Set = set(Input)
>>> [x for x in Ref if x in Input_Set]
[3, 2, 11, 10, 9, 8, 5, 4]
票数 25
EN

Stack Overflow用户

发布于 2019-12-25 16:54:45

除了dcg的答复外,另一种方法是:

代码语言:javascript
运行
复制
Ref = [3, 2, 1, 12, 11, 10, 9, 8, 7, 6, 5, 4]
Input = [9, 5, 2, 3, 10, 4, 11, 8]

ref = set(Ref)
inp = set(Input)

sorted_list = sorted(ref.intersection(inp), key = Ref.index)

这项工作的产出是:

代码语言:javascript
运行
复制
[3, 2, 11, 10, 9, 8, 5, 4]

在这里,您将列表转换为集合,找到它们的交集,并对它们进行排序。集合是根据“参考”列表的索引进行排序的。

票数 8
EN

Stack Overflow用户

发布于 2019-12-25 17:03:56

您可以使用排序方法:

代码语言:javascript
运行
复制
# keep in a dict the index for each value from Ref
ref  = {val: i for i, val in enumerate(Ref)}
# sort by the index value from Ref for each number from Input 
sorted(Input, key=ref.get)

产出:

代码语言:javascript
运行
复制
[3, 2, 11, 10, 9, 8, 5, 4]
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59480068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档