A = ['a','b','c']
B = ['d','b','e']
res = [i for i in A if i in B]
当A中的元素数为300000且B中的元素数为200000时,上述代码不起作用。
我该如何解决?
我也试过
res = {i for i in A if i in B}
res = list(res)
但仍然无法得到结果。
答案 0 :(得分:3)
A = ['a','b','c']
B = ['d','b','e']
set(A).intersection(B)
要获取返回的列表:
list(set(A).intersection(B))
交集将任何iterable作为参数,因此您只需要设置A
一个集合。
注意,union(),intersection(),difference()和symmetric_difference()的非运算符版本将接受任何iterable作为参数。
答案 1 :(得分:3)
如果保留顺序和/或重复无关紧要,则可以使用
A = ['a', 'b', 'c']
B = ['d', 'e', 'f']
res = list(set(A) & set(B))
如果订单和/或重复确实很重要,那么您可以使用
A = ['a', 'b', 'c']
B = ['d', 'e', 'f']
set_b = set(B)
res = [i for i in A if i in set_b]
答案 2 :(得分:1)
你基本上计算两组的交集。使用set
数据类型可以提高效率:
A = {'a','b','c'}
B = {'d','b','e'}
res = A & B