Python列表排序取决于项目是否在另一个列表中

Ash*_*shy 8 python sorting list

说我有一个清单:

A = [1,2,3,4,5,6,7,8,9,0]
Run Code Online (Sandbox Code Playgroud)

和第二个清单:

B = [3,6,9]
Run Code Online (Sandbox Code Playgroud)

排序列表A的最佳方法是什么,以便与列表B中的项匹配的任何内容都将出现在开头,以便结果为:

[3,6,9,1,2,4,5,7,8,0]
Run Code Online (Sandbox Code Playgroud)

Hen*_*nyH 11

>>> A = [1,2,3,4,5,6,7,8,9,0]
>>> B = [3,6,9]
>>> sorted(A,key=lambda e: e not in B)
[3, 6, 9, 1, 2, 4, 5, 7, 8, 0]
Run Code Online (Sandbox Code Playgroud)

这是如何工作的:

sorted根据key(element)每个元素的结果对interable进行排序(keyis 的默认值None导致它直接根据元素进行排序).

在我们的情况下,lambda lambda e: e not in B将返回True,如果e 不是B,或者False如果e B.带有的元素False被排序到前面,你最终会得到你的结果.如下所示:

>>> sorted([True,False,False])
[False, False, True]
Run Code Online (Sandbox Code Playgroud)