For a solution that doesn't require sorting (O(n*logn)), you can merge the sorted lists with heapq.merge after removing the duplicates and intersections:
from heapq import merge
def uncommon(l1,l2):
d1 = dict.fromkeys(l1)
d2 = dict.fromkeys(l2)
drop = set(d1).intersection(d2)
return list(merge(*([x for x in d
if not x in drop]
for d in [d1, d2])))
uncommon([2,2,4], [1,3,3,4,5,256])
# [1, 2, 3, 5, 256]
4条答案
按热度按时间91zkwejq1#
使用集合是一个很好的开始-集合具有关于组操作的良好逻辑。
如果我们使用维恩图,我们可以看到“不常见的”元素是两个列表的“并集”中的所有元素减去两个列表的“交集”(白色部分是交集):
在Python中,这称为symmetric difference,并内置于以下集合中:
cpjpxq1n2#
For a solution that doesn't require sorting (
O(n*logn)
), you can merge the sorted lists withheapq.merge
after removing the duplicates and intersections:zbq4xfa03#
要从两个列表中获取非公共元素,请从两个列表的并集(list1+list2)中移除公共元素。
输出量
wnavrhmk4#
公共元素是包含在两个列表中的元素。因此,首先删除列表1中也在列表2中的元素。然后删除列表2中也在列表1中的元素。返回剩余的元素。