我有一个列表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
答案 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]