在Python中从两个元组列表中选择共同元素的元组
我想从列表list1中的元组创建一个新的元组列表,前提是list1中的元素在list2中也存在或者是共同的。
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')]
我下面的代码可以在这种情况下正常工作,但在处理大数据集时却出现了问题。
All_elements_set1 = set([item for tuple in list1 for item in tuple])
All_elements_set2 = set([item for tuple in list2 for item in tuple])
common_set = All_elements_set1 & All_elements_set2
new_list = [(i,v) for i,v in list1 if i (in common_set and v in common_set)]
print new_list
2 个回答
0
基本上,你不需要为list1中的元素创建一个集合。你只需要检查list1中的每一个元组,看看它的元素是否在list2中的某个元组里...
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 )]
因为你没有提供代码出错的具体情况,所以我无法判断这个代码在你出错的例子上是否有效。
3
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用它。这个过程就像是把水从一个水桶倒到另一个水桶里。我们需要确保水不会洒出来,也就是数据不会丢失。
有些时候,我们会用到一些工具或者库来帮助我们完成这个任务。这些工具就像是水管,可以让水流得更顺畅、更快。
在处理数据时,我们还需要注意数据的格式。就像水有不同的形状和颜色一样,数据也有不同的类型,比如数字、文字或者图片。我们需要确保在使用这些数据时,它们的格式是正确的,这样才能顺利地进行后续操作。
总之,处理数据就像是一个小小的搬运工,我们需要小心翼翼地把数据从一个地方搬到另一个地方,确保它们在这个过程中不会出错。
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')]