查找列表交集中元素数量的快速方法(Python)

van*_*van 3 python optimization

有没有更快的方法在Python中计算这个值:

len([x for x in my_list if x in other_list])
Run Code Online (Sandbox Code Playgroud)

我尝试使用集合,因为列表的元素是唯一的,但我注意到没有区别.

len(set(my_list).intersection(set(other_list)))
Run Code Online (Sandbox Code Playgroud)

我正在处理大型名单,所以即使是最轻微的改进也很重要.谢谢

Jon*_*nts 5

简单的方法是找到最小长度列表...而不是使用set.intersection...,例如:

a = range(100)
b = range(50)

fst, snd = (a, b) if len(a) < len(b) else (b, a)
len(set(fst).intersection(snd))
Run Code Online (Sandbox Code Playgroud)