比较字符串列表的最快方法

时间:2014-07-17 10:01:26

标签: python

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)

但仍然无法得到结果。

3 个答案:

答案 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