Skip to main content
 首页 » 编程设计

python之从元组列表中获取交集

2025年05月04日18bjzhanghao

我有两个元组列表

a = [('head1','a'),('head2','b'),('head3','x'),('head4','z')] 
b = [('head5','u'),('head6','w'),('head7','x'),('head8','y'),('head9','z')] 

我想取每个元组的第二个元素的交集,例如集合 {a[0][0],a[0][1],a[0][2],a[0] [3]} 与集合 {b[0][0],b[0][1],b[0][2],b[0][3],b[0 ][4]} 来自列表 a 和 b,如果存在交集值,它返回元组的第一个元素映射。结果输出应如下所示:

res = [('head3','head7'),('head4','head9')] 

到目前为止我已经试过了:

x = [(a[i][0],b[j][0]) for i in range(len(a)) for j in range(len(b)) if a[0][i] == b[0][j]] 

但出现错误IndexError: tuple index out of range

执行此操作的正确且最快的方法是什么?

请您参考如下方法:

您可以在 Python 3 中执行以下操作。从您的列表创建字典,从两个字典中获取键的交集,在键处获取相应的值:

>>> da = {k:v for v, k in a} 
>>> db = {k:v for v, k in b} 
>>> [(da[k], db[k])  for k in da.keys()&db.keys()] 
[('head4', 'head9'), ('head3', 'head7')] 

在 Python 2 中,您可以使用 set(da).intersection(db) 代替 da.keys()&db.keys()。