查找两个列表之间的交集

Finding intersections between two lists

编辑:我正在使用 Jupyter notebook,我在工作时连续有两个不同的脚本,这里显示的脚本是一个,这里显示的错误来自另一个脚本。 (错误)感谢您的宝贵时间!不过我是故意多学的。

我正在尝试在 10000 个随机生成的 6 个元素编号介于 1 到 49 之间的列表与我自己编写的也是 1 到 49 的单个列表之间找到交集...

我尝试在以下脚本中使用 def:

import random
lst1 = [7, 10, 21, 35, 48, 19]
lst2 = []
for i in range(10000):
    r = random.sample(range(1, 50), 6)
    lst2.append(r)
 #HERE #(   
def intersection(lst1, lst2): 
    lst3 = [value for value in lst1 if value in lst2] 
    return lst3 #)
    
    
#print(results)   
print("------------")
print(Intersection(lst1, lst2))

但我收到以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-88-0caf870aa4e6> in <module>()
     13 #print(results)
     14 print("------------")
---> 15 print(Intersection(lst1, lst2))

<ipython-input-51-a4e2d32a8078> in Intersection(lst1, lst2)
      7 
      8 def Intersection(lst1, lst2):
----> 9     return set(lst1).intersection(lst2)
     10 
     11 

TypeError: unhashable type: 'list'

有什么我想念的吗?我试图在网上查找但找不到任何解决方案!

您可以使用 sets 这将提高速度

def intersection(lst1, lst2): 
    return list(set(lst1) & set(lst2))

注意:为了与您的代码保持一致,我使用了 list 构造函数。

>>> intersection([1,2,3,4],[3,4,5,6])
[3, 4]
>>>

您可以使用集合:

set(list1).intersection(set(list2))

将您的列表变成集合并使用 set1.intersection(set2) 来创建不同的集合。

我更改了 list2 只是为了表明代码可以正常工作 你的代码有一些错误 你可以这样做:

import random

lst1 = [7, 10, 21, 35, 48, 19]
lst2 = [6,7,10]
# for i in range(10000):
#     r = random.sample(range(1, 50), 6)
#     lst2.append(r)


# HERE #(
def intersection(lst1, lst2):
   lst3 = [value for value in lst1 if value in lst2]
   return lst3  # )

def Intersection(lst1, lst2):
   return set(intersection(lst2,lst1))
print(Intersection(lst1, lst2))