比较两个列表列表以查找通用值Python

时间:2019-07-09 06:47:54

标签: python find nested-lists

我有两个要迭代的列表列表,并逐个括号比较列表中每个括号中的值.....

List_1
[[42, 43, 45, 48, 155, 157], [37, 330, 43, 47, 157], [258, 419, 39, 40, 330, 47], [419, 39, 44, 589, 599, 188].....
List_2
[[37, 330, 43, 47, 157], [258, 419, 39, 40, 330, 47], [419, 39, 44, 589, 599, 188], [41, 44, 526, 602, 379, 188]....

我需要比较List_1 [42, 43, 45, 48, 155, 157]中的第一个括号 放在List_2 [37, 330, 43, 47, 157]中的第一个括号中 期望的结果是每个连续括号中的数字相同...对于第一个括号,结果是43和157

然后我需要在List_1中继续第二个括号,在List_2中继续第二个括号,等等。

  • 每个括号中的值数量可能会有所不同
  • 我需要一个列表中的每个方括号与另一个列表中的相应方括号进行比较
  • 我不需要将结果分开

我是一个非常基础的人,但是我尝试了一些不同的事情,包括使用集合交集,列表匹配。我敢肯定,有一种简单的方法,但是只是入门。

    set_x = set([i[1] for i in list_1])
    print(set_x)
    set_y = set([i[0] for i in list_2])
    matches = set_x.intersection(set_y)
    print(matches)

这提供的答案远远不及{3, 8, 396, 12,},而我真的无法弄清楚它在做什么。

也尝试过

    common_elements=[]
    import itertools 
    for i in list(itertools.product(coords_list_1,coords_list_2)):
        if i[0] == i[1]:
            common_elements.append(i[0])
            print(common_elements)

但是会产生大量结果。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用zip并设置intersection

for x, y in zip(List_1, List_2):
    print(set(x).intersection(y))

# {43, 157}
# {330, 47}
# {419, 39}
# {188, 44}

答案 1 :(得分:1)

您的方法解决了错误“轴”中的元素。例如:

set_x = set([i[1] for i in list_1])

创建每个列表的第二个元素的集合。

在这种情况下,您必须忘记索引。

您只想将zip个子列表放在一起以在它们之间执行交集

List_1 = [[42, 43, 45, 48, 155, 157], [37, 330, 43, 47, 157], [258, 419, 39, 40, 330, 47], [419, 39, 44, 589, 599, 188]]
List_2 = [[37, 330, 43, 47, 157], [258, 419, 39, 40, 330, 47], [419, 39, 44, 589, 599, 188], [41, 44, 526, 602, 379, 188]]

result = [set(x) & set(y) for x,y in zip(List_1,List_2)]

结果:

>>> result
[{43, 157}, {330, 47}, {419, 39}, {188, 44}]