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

2024-04-19 16:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

list3 = ['a','b']

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

在查看了python列表的理解之后,我已经做了以下工作

[x[0] for x in list1 if (x[0] in [y[0] for y in list2])]

我的问题是,一个有经验的python程序员会如何编写代码?我自己把它编码后,仍然觉得很难读懂。否则你怎么做


Tags: 代码in元素编码列表forif经验
3条回答

我想您想在这里使用^{}s:

set(x[0] for x in list1).intersection(y[0] for y in list2)

或者使用语法糖:

{x[0] for x in list1} & {y[0] for y in list2}

两者都会导致:

set(['a', 'b'])

我会用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']

编辑:在阅读了您在上面的评论后,您似乎在寻找以下内容:

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

或者使用sets

In [43]: from operator import itemgetter

In [44]: set(map(itemgetter(0),l1)) & set(map(itemgetter(0),l2))
Out[44]: set(['a', 'b'])

我认为在这里使用集合可能更清楚(因为您没有重复的元素):

set1 = set( el[0] for el in list1 )
set2 = set( el[0] for el in list2 )
set3 = set1 & set2 # set intersection
# list3 = list(set3)

相关问题 更多 >