Python:创建两个元素为数字集的列表的交集长度矩阵

Python:创建两个元素为数字集的列表的交集长度矩阵,python,matrix,set,matrix-multiplication,set-intersection,Python,Matrix,Set,Matrix Multiplication,Set Intersection,我正在使用Python3.5,我想知道是否有更有效的方法来实现这一点 我有两个列表(list1和list2) 每个列表中的每个元素都是一组数字 在下面的示例中,list1基本上是一个1x4“矩阵,list2是一个1x3“矩阵” 我想制作一个4x3矩阵,给出list1中每个元素与list2中每个元素交集的长度 下面是一些有效的示例代码,但是当我的列表长度达到数千时,它会有点慢 有没有更快/更好的方法 谢谢大家! list1 = [{1,2,3}, {4,5,6}, {1,2,9}, {4,5,

我正在使用Python3.5,我想知道是否有更有效的方法来实现这一点

  • 我有两个列表(
    list1
    list2
  • 每个列表中的每个元素都是一组数字
  • 在下面的示例中,
    list1
    基本上是一个1x4“矩阵,
    list2
    是一个1x3“矩阵”
  • 我想制作一个4x3矩阵,给出
    list1
    中每个元素与
    list2
    中每个元素交集的长度
下面是一些有效的示例代码,但是当我的列表长度达到数千时,它会有点慢

有没有更快/更好的方法

谢谢大家!

list1 = [{1,2,3}, {4,5,6}, {1,2,9}, {4,5,10}] # 1 x 4 "matrix"
list2 = [{1,3,9}, {4,2,8}, {1,0,10}] # 1 x 3 "matrix"

myoutputmatrix = []

for aset in list1:
    small_list = [len(aset & asecondset) for asecondset in list2]
    myoutputmatrix .append(small_list)

myoutputmatrix # [[2, 1, 1], [0, 1, 0], [2, 1, 1], [0, 1, 1]]

您已经拥有的看起来是同步进行的最有效的方法。如果需要更快,请考虑使用多重处理并行化。尝试使用<代码> NUMPY < /代码>。它具有许多用于处理矩阵优化的功能:<代码> MyOutPutsMatx= = [Lin(L1和L2在List2L2中)用于List1]中的L1 < /代码>。虽然你希望在计时方面有更大的进步,但我认为这实际上是直接的矩阵乘法,一旦将输入转换为实际矩阵,
1
表示特定输入集中存在特定数字,
0
表示不存在。@user2357112我没有这样想过,但你是对的。将每个集合转换为“完整”向量可能是值得的。也许那样更快。谢谢