繁体   English   中英

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

[英]Comparing two list of lists to find common values Python

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

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] List_1 [42, 43, 45, 48, 155, 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)

但它产生了大量结果。

谢谢你的帮助!

使用zip和set的intersection

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

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

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

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}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM