Python中两个列表的联合

时间:2016-04-01 06:55:51

标签: python list

我有两个名单说:

a = [1, 2, 2, 2, 3]

b = [2, 5, 6]

做完工会后,我应该得到这样的东西(不要介意订单):

c = [1, 2, 2, 2, 3, 5, 6]

最终列表应仅包含一次公共元素,其余元素(来自两个列表)应按原样复制。集合不能用于此,因为它们从列表中删除多个元素,这不是一个联合。什么是Pythonic方法呢?

1 个答案:

答案 0 :(得分:9)

执行联盟,保持重复:

>>> c = a + b
[1, 2, 2, 3, 2, 5, 6]

进行联盟,保持重复和顺序:

>>> c = sorted(a + b)
[1, 2, 2, 2, 3, 5, 6]

执行联合,不在每个列表中重复,但在最终联合中允许重复,并保持顺序:

>>> c = sorted(list(set(a)) + list(set(b)))
[1, 2, 2, 3, 5, 6]

在澄清问题之后,目标是建立一个列表,其中包含元素(包括重复),然后添加b的元素(如果它们不在新列表中)。

>>> c = a + [e for e in b if e not in a]
[1, 2, 2, 2, 3, 5, 6]

在对问题进行另一次澄清之后,目标是构建一个包含输入列表的所有元素的列表。但是,如果元素是共同的,那么它们被推到相同的数字

>>> from collections import Counter
>>> def merge(a,b):
...   na, nb = Counter(a), Counter(b)
...   return list(Counter({k: max((na[k], nb[k])) for k in set(a + b)}).elements())
>>> merge([1, 2, 2, 2, 3], [2, 5, 6])
[1, 2, 2, 2, 3, 5, 6]
>>> merge([1, 2, 3], [2, 2, 4])
[1, 2, 2, 4]