我有两个列表(list1和list2),其中包含1000万个公司名称。每个列表都没有重复,但有些公司出现在两个列表中。而且我想找到那些公司是什么。我写了下面的代码:
list_matched = []
for i in range(len(list1)):
for j in range(len(list2)):
if list1[i] == list2[j]:
list_matched.append(list1[i])
此代码的问题在于它永远不会完成执行。我的问题是我可以在合理的时间内完成这项任务。 1000万个名字的大小似乎太大而无法处理。
答案 0 :(得分:7)
使用设定逻辑。它专为此任务而设计。
a = set(list1)
b = set(list2)
companies_in_both = a & b
(这将产生set
作为输出。如果您需要它作为列表,只需将该集传递给list()
。)
答案 1 :(得分:3)
我建议从一个列表中创建一个集合并检查另一个列表,例如:
inlist1 = set(list1)
list_matched = [x for x in list2 if x in inlist1]
当然,您可以按照其他方式执行此操作,具体取决于您要保留的列表顺序(如果有) - 此代码段会保留list2
的顺序。