Kal*_*lol 2 python dictionary list-comprehension list python-3.x
我有两个清单,
l1 = [1,4,3,2,5]
l2 = [4,3,2,10]
Run Code Online (Sandbox Code Playgroud)
现在我想找到列表之间的公共元素,所以我使用以下代码,
list(set(l1).intersection(set(l2)))
>> [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
但它改变了 的顺序l1,我不想改变顺序所以结果应该是,
>> [4, 3, 2]
Run Code Online (Sandbox Code Playgroud)
寻找在不改变顺序的情况下执行此操作的最快方法?
您可以使用l1以下方法重新排序结果:
>>> sorted(set(l1).intersection(set(l2)), key=l1.index)
[4, 3, 2]
Run Code Online (Sandbox Code Playgroud)
您也可以使用列表理解而不是集合交集,但我相信第一种方法通常会更快,具体取决于每个列表中的元素数量,因为搜索列表是O(n),下面的解决方案变为O(n*m):
>>> [i for i in l1 if i in l2]
[4, 3, 2]
Run Code Online (Sandbox Code Playgroud)
最后,您可以通过转换l2为集合来优化理解方法:
>>> s2 = set(l2)
>>> [i for i in l1 if i in s2]
[4, 3, 2]
Run Code Online (Sandbox Code Playgroud)