这是我想要做的.我有两个元组列表.构建一个元素列表,使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程序员如何编写这个代码?自己编写了这个,我仍然觉得这很难读.如果不是,你会怎么做呢
我用的是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)
| 归档时间: |
|
| 查看次数: |
10651 次 |
| 最近记录: |