![](/img/trans.png)
[英]Comparing two lists to find the common elements then sorting into three different list using 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.