在Python中,将两个列表取交集并将结果存储在元组中

4
我认为我的问题很普遍,但是在谷歌和SO中都找不到任何帮助。
我有两个包含类Marker对象的列表。一个Marker由变量namepositiontype组成。我想要交集这两个列表,创建相同类型标记的元组并将它们存储在新列表中。简单地说,我想做以下事情:
g_markerList = [ (marker1,marker2) for marker1 in marker1List and marker2 in marker2List if marker1.type == marker2.type ]

显然,这段代码不能正常工作。编译器不“知道”在and之后的变量marker2,导致for语句无法结束。

请帮助我求出这两个列表的交集,并获得一组相似标记的元组列表!

1个回答

8

and替换为for

g_markerList = [ (marker1,marker2) for marker1 in marker1List
                                   for marker2 in marker2List
                                   if marker1.type == marker2.type ]

我还有一个问题。我用这种方式构建的列表是一个排列,但不是一个交集,即列表1中的每个标记都与列表2中共享相同类型的每个标记配对。因此,一个标记在列表中出现了多次。如何只取每个标记一次? - Pavlo Dyban
将它们添加到“set”中。在“set”中多次添加相同的对象会被忽略。 就此而言,集合具有一个“intersection”方法和运算符(&),您可以使用它们,但是您想基于两个集合的投影进行比较。不确定如何在Python中实现。这将是一个值得探讨的问题(我会投票支持)。 - Chris Pfohl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接