我有两个要迭代的列表列表,并逐个括号比较列表中每个括号中的值.....
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)
但是会产生大量结果。
感谢您的帮助!
答案 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}]