如何匹配两个二维列表

问题描述 投票:0回答:1

我有两个超过 15 行的 2d 列表,并且与另一个列表的长度不同。我希望 A 只加入 B 列表中的匹配值。这是一个小例子,

 A = [[3,10],[4,25,31],[2,10]]

 B = [[2,6,9,10],[15,25,26], 
 [2,6,8,10],[16,20,21]]

我希望我的结果是这样的

 C = [[[2,3,6,9,10,10] 
 [2,3,6,8,10,10]], 
 [[4,15,25,25,26,31]], 
 [[2,6,9,10,10], 
 [2,2,6,8,10,10]]]
python multidimensional-array jupyter-notebook pycharm
1个回答
1
投票

您可以计算这些可迭代对象的笛卡尔积并检查列表的交集:

C = []
for a in A:
    c = []
    for b in B:
        if len(set(a) & set(b)) > 0:
            c.append(sorted(a + b))
    if len(c) > 0:
        C.append(c)

如果你想使用列表理解来获得更紧凑的东西(并且你使用的是 python >= 3.8):

C = [c for a in A if len(c := [sorted(a + b) for b in B
                               if len(set(a) & set(b))])]

这是使用

A
B
列表的输出:

[[[2, 3, 6, 9, 10, 10],
  [2, 3, 6, 8, 10, 10]],
 [[4, 15, 25, 25, 26, 31]],
 [[2, 2, 6, 9, 10, 10],
  [2, 2, 6, 8, 10, 10]]]
© www.soinside.com 2019 - 2024. All rights reserved.