查找两个列表之间的交集
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'
有什么我想念的吗?我试图在网上查找但找不到任何解决方案!
您可以使用 set
s 这将提高速度
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))
编辑:我正在使用 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'
有什么我想念的吗?我试图在网上查找但找不到任何解决方案!
您可以使用 set
s 这将提高速度
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))