我有两个列表,一个参考和一个输入列表。
Ref = [3, 2, 1, 12, 11, 10, 9, 8, 7, 6, 5, 4]
Input = [9, 5, 2, 3, 10, 4, 11, 8]我想按照参考文献的顺序对输入列表进行排序。如果输入列表中缺少某个元素,则可以跳过并转到另一个元素。
因此,基于参考列表的排序输入列表如下
Sorted_Input = [3, 2, 11, 10, 9, 8, 5, 4]发布于 2019-12-25 16:20:19
我认为这回答了你的问题:
>>> [x for x in Ref if x in Input]
>>> [3, 2, 11, 10, 9, 8, 5, 4]希望能帮上忙。
UPDATE:使Input成为更快访问的set:
>>> Input_Set = set(Input)
>>> [x for x in Ref if x in Input_Set]
[3, 2, 11, 10, 9, 8, 5, 4]发布于 2019-12-25 16:54:45
除了dcg的答复外,另一种方法是:
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)这项工作的产出是:
[3, 2, 11, 10, 9, 8, 5, 4]在这里,您将列表转换为集合,找到它们的交集,并对它们进行排序。集合是根据“参考”列表的索引进行排序的。
发布于 2019-12-25 17:03:56
您可以使用排序方法:
# 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)产出:
[3, 2, 11, 10, 9, 8, 5, 4]https://stackoverflow.com/questions/59480068
复制相似问题