仅当某些值匹配时,如何才能匹配两个列表列表?

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

我有两个列表列表

A
B
A
有超过 15 个子列表,并且没有与其他列表相同的长度。如果
A
中的列表中有匹配值,我希望
B
中的列表与
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
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.