比较两个元组列表中元素之间的元素

sid*_*g11 5 python

这是我想要做的.我有两个元组列表.构建一个元素列表,使list1中元组中的第一个元素与列表2中元组中的第一个元素匹配

list1 = [('a', 2), ('b', 3), ('z', 5)]

list2 = [('a', 1), ('b', 2), ('c', 3)]

list3 = ['a','b']
Run Code Online (Sandbox Code Playgroud)

注意:第一个元素不能重复

在查看了python列表推导之后,这就是我所做的

[x[0] for x in list1 if (x[0] in [y[0] for y in list2])]
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是一个有经验的python程序员如何编写这个代码?自己编写了这个,我仍然觉得这很难读.如果不是,你会怎么做呢

Ash*_*ary 8

我用的是zip():

In [25]: l1 = [('a', 2), ('b', 3), ('z', 5)]

In [26]: l2 = [('a', 1), ('b', 2), ('c', 3)]

In [27]: [x[0] for x,y in zip(l1,l2) if x[0]==y[0]]
Out[27]: ['a', 'b']
Run Code Online (Sandbox Code Playgroud)

编辑:阅读上面的评论后,看起来你正在寻找这样的东西:

In [36]: [x[0] for x in l1 if any(x[0]==y[0] for y in l2)]
Out[36]: ['a', 'b']
Run Code Online (Sandbox Code Playgroud)

或使用sets:

In [43]: from operator import itemgetter

In [44]: set(map(itemgetter(0),l1)) & set(map(itemgetter(0),l2))
Out[44]: set(['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

  • @AshwiniChaudhary:这也是我的想法,但我建议使用集合来避免二次运行时. (2认同)