首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从元组列表中获取交集

问从元组列表中获取交集
EN

Stack Overflow用户
提问于 2017-07-26 03:27:18
回答 3查看 4.5K关注 0票数 2

我有两个元组列表

代码语言:javascript
复制
a = [('head1','a'),('head2','b'),('head3','x'),('head4','z')]
b = [('head5','u'),('head6','w'),('head7','x'),('head8','y'),('head9','z')]

我想要取每个元组的第二个元素的交集,例如,set {a[0][0],a[0][1],a[0][2],a[0][3]}与列表a和b中的set {b[0][0],b[0][1],b[0][2],b[0][3],b[0][4]}的交集,这样如果交叉值存在,它将返回元组的第一个元素映射。生成的输出应如下所示:

代码语言:javascript
复制
res = [('head3','head7'),('head4','head9')]

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

代码语言:javascript
复制
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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-26 03:33:10

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

代码语言:javascript
复制
>>> 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')]

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

票数 4
EN

Stack Overflow用户

发布于 2017-07-26 03:41:18

您可以将函数与生成器一起使用:

代码语言:javascript
复制
def pairs():
   a = [('head1','a'),('head2','b'),('head3','x'),('head4','z')]
   b = [('head5','u'),('head6','w'),('head7','x'),('head8','y'),('head9','z')]

   for val1, val2 in a:
       for val3, val4 in b:
           if val2 == val4:
               yield (val1, val3)

print(list(pairs()))

输出:

代码语言:javascript
复制
[('head3', 'head7'), ('head4', 'head9')]
票数 4
EN

Stack Overflow用户

发布于 2020-03-02 00:52:52

您也可以像这样使用列表理解

代码语言:javascript
复制
a = [('head1','a'),('head2','b'),('head3','x'),('head4','z')]
b = [('head5','u'),('head6','w'),('head7','x'),('head8','y'),('head9','z')]

pairs = [(val1,val3) for val1,val2 in a for val3,val4 in b if val2 == val4]
print(pairs)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45311959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档