在python中,如果两个元组列表都包含公共元素,则从两个元组列表中选择元组

2024-05-15 21:10:24 发布

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

如果list1中的元素在list2中存在或公共,我想从list1的元组中创建一个新的元组列表。在

list1 = [('We', 'all'), ('all', 'live'), ('live', 'in'), ('in', 'a'),
         ('a', 'yellow'), ('yellow', 'submarine.')]

list2 = [('A', 'live'), ('live', 'yellow'), ('yellow', 'submarine'),
         ('submarine', 'lifeform'), ('lifeform', 'in'), ('in', 'a'),
         ('a', 'sea.')]

预期输出=[('live', 'in'), ('in', 'a'), ('a', 'yellow')]

我的代码如下:在这种情况下它可以工作,但在大数据集中却以某种方式失败了。在

^{pr2}$

Tags: 代码inlive元素列表情况allwe
2条回答

基本上,您不需要为列表1中的元素设置集合。如果检查列表1中的每个元组,它们的元素是否在列表2中的某个元组中。。。在

list1 = [('We', 'all'), ('all', 'live'), ('live', 'in'), ('in', 'a'),
         ('a', 'yellow'), ('yellow', 'submarine.')]

list2 = [('A', 'live'), ('live', 'yellow'), ('yellow', 'submarine'),
         ('submarine', 'lifeform'), ('lifeform', 'in'), ('in', 'a'),
         ('a', 'sea.')]

Elements_set2 = set([item for tuple in list2 for item in tuple])

print [(i,v) for i,v in list1 if (i in Elements_set2 and v in Elements_set2 )]

由于您没有提供代码失败情况的详细信息,因此无法检查这个示例是否适用于失败的示例。在

In [39]: from itertools import chain

In [40]: list1 = [('We', 'all'), ('all', 'live'), ('live', 'in'), ('in', 'a'),
    ...:          ('a', 'yellow'), ('yellow', 'submarine.')]
    ...: 
    ...: list2 = [('A', 'live'), ('live', 'yellow'), ('yellow', 'submarine'),
    ...:          ('submarine', 'lifeform'), ('lifeform', 'in'), ('in', 'a'),
    ...:          ('a', 'sea.')]
    ...: 

In [41]: elems = set(chain.from_iterable(list2))

In [42]: [tup for tup in list1 if elems.issuperset(tup)]
Out[42]: [('live', 'in'), ('in', 'a'), ('a', 'yellow')]

相关问题 更多 >