给定两个列表,我需要制作第三个列表,其中包含在所有列表 1 和列表 2 中仅出现两次的元素。 如何在合理的时间和空间复杂度下高效地做到这一点?
我的解决方案: 使用字典:
from collections import defaultdict
L=['a','b','c','d','a','d','e','e','g','h']
K=['a','g','i','g','g','i','r','r']
d=defaultdict(int)
for i in L:
d[i]+=1
for j in K:
d[j]+=1
print d
result=[]
for key,val in d.iteritems():
if val == 2:
result.append(key)
print result
我想要的输出是:
['e', 'd', 'i', 'r']
我可以获得更好的 pythonic 解决方案吗?
谢谢。
请您参考如下方法:
可以使用集合的计数器类来简化代码:
from collections import Counter
...
d = Counter(L+K) #we are combining to process both at once
此外,您可以通过执行条件 for 循环来组合行。因此,只有当值为 2 时,我们才会将其追加到我们的数组中。
L=['a','b','c','d','a','d','e','e','g','h']
K=['a','g','i','g','g','i','r','r']
print [k for k, v in Counter(L+K).iteritems() if v == 2]
