Python维护列表交集的顺序

add*_*ons 5 python list

我有一个列表A和列表B,我想从这两个列表中获取公共元素,但希望当我获取公共元素时,它们应该保持 List 的顺序A

首先,我开始将它们转换为集合并取交叉点,但这存在维护顺序的问题。

common = list(set(A).intersection(set(B)))
Run Code Online (Sandbox Code Playgroud)

所以我决定做列表理解:

common = [i for i in A if i in B]
Run Code Online (Sandbox Code Playgroud)

我正进入(状态

IndexError: too many indices for array
Run Code Online (Sandbox Code Playgroud)

Kas*_*mvd 6

作为此类问题的一般答案,您可以使用sortedfunction withlambda x:A.index(x)作为其键,该键将根据列表 A 的顺序对结果进行排序:

>>> common = sorted(set(A).intersection(B) ,key=lambda x:A.index(x))
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要set(B)用于交集。

  • @Null-Hypothesis:只要`A` 是一个集合,它就有一个交集方法。像这里所做的那样在集合和列表之间进行交集是合法的。 (2认同)
  • `key=A.index` 应该可以在不使用 lambda 的情况下工作。我认为使用“A.index”排序会将性能特征更改为二次,这对于非常大的交叉点来说不太理想。 (2认同)