在Python中合并元组列表
我需要把两个元组列表合并,期望的结果是这两个列表之间的某种交集。我已经有了一个很简单的解决方案。
列表1的最后一个元组的值不完整。
列表2有一些列表1没有的元组,还有一些是完整的元组。
结果……嗯,最好用例子来说明:
l1 = [('4',), ('6',)] l2 = [('3', '1'), ('4', '23'), ('6', '34')] #my dumb solution def mymerge(l1,l2): l3 = [] for x in l2: if x[0] in [ y[0] for y in l1 ]: l3.append(x) return l3 result = mymerge(l1,l2) #result is what expected-> [('4','23'),('6','34')]
我的问题是:除了我这个简单的解决方案,还有什么其他的办法吗?
我真的很想知道……
谢谢
4 个回答
0
In [47]: l1 = [('4',), ('6',)]
In [48]: l2 = [('3', '1'), ('4', '23'), ('6', '34')]
In [49]: la = [l[0] for l in l1]
In [50]: la
Out[50]: ['4', '6']
In [51]: [l for l in l2 if l[0] in la]
Out[51]: [('4', '23'), ('6', '34')]
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。
1
设置查找必须更快:
>>> [ y for y in l2 if y[0] in set(*zip(*l1))]
[('4', '23'), ('6', '34')]
>>>
2
使用 itertools.chain.from_iterable
并把 l2
当作字典来用是更好的选择,原因有两个:
我们不需要生成中间的元组或列表,这样可以节省一些资源。
我们可以在固定的时间内找到需要的东西,因为我们使用的是
dict
(字典)。
l2 = dict(l2)
from itertools import chain
print [(item, l2.get(item)) for item in chain.from_iterable(l1)]
# [('4', '23'), ('6', '34')]