Python在列表的交集中维护顺序

时间:2015-04-20 18:26:21

标签: python list

我有一个列表A和列表B,我希望从两个列表中获取常用元素,但是当我得到公共元素时,他们应该维护列表A的顺序

首先,我开始将它们转换为设置并占用交叉点但是存在维护顺序的问题。

common = list(set(A).intersection(set(B)))

所以我决定做列表理解:

common = [i for i in A if i in B]

我正在

IndexError: too many indices for array

2 个答案:

答案 0 :(得分:4)

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

>>> common = sorted(set(A).intersection(B) ,key=lambda x:A.index(x))

另外注意您不需要使用set(B)进行交叉。

答案 1 :(得分:2)

您的代码(common = [i for i in A if i in B])运行正常。也许你在问题中写的不是提出IndexError的确切代码。

您可以通过set

制作B来加快会员资格测试
set_b = set(B)
common = [i for i in A if i in set_b]