将列表A中的项目附加到列表B(如果它们不在列表B中)

时间:2013-09-15 07:10:45

标签: python list-comprehension

所以说我有以下列表:

a = [1,2,3]
b = [5,2,3]
c = [5,4,2]

我想将每个列表中的唯一项添加到一个新数组中,最终得到:

unique_list = [1,2,3,5,4]

对于更高级的案例,我仍然没有完全理解列表理解,但是我认为以下明显不正确的代码会传达我的意图:

def append_unique(new_list):
    unique_list.append(item) for item in new_list if item not in unique_list
unique_list = []    

append_unique([1,2,3])
append_unique([5,2,3])
append_unique([5,4,2])

这是否可以使用单行,或者我应该让步并寻求嵌套解决方案?

更新

抱歉,我认为我没有特别好地传达这一点,我需要将每个附加列表的唯一项目添加为循环的一部分,因此为什么每个需要单独传递append_unique()

我尝试按以下方式修改append_unique()以使用set()

def append_unique(new_list):
    unique_list = list(set(unique_list + new_list))
unique_list = []    

append_unique([1,2,3])
append_unique([5,2,3])
append_unique([5,4,2])

这里的问题当然是我得到错误,我不完全明白如何解决:

local variable 'unique_list' referenced before assignment

2 个答案:

答案 0 :(得分:2)

如果您不介意使用集合,以下代码可能适合您:

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

>>> my_set = set(a) | set(b) | set(c)

>>> my_set
set([1, 2, 3, 4, 5])

>>> unique_list = list(my_set)
>>> unique_list
[1, 2, 3, 4, 5]

答案 1 :(得分:2)

如果订单无关紧要,您可以使用套装:

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

如果是,则可以使用itertools.groupby()

>>> from itertools import groupby
>>> res = []
>>> for ele, _ in groupby(a+b+c):
...     if ele not in res:
...             res.append(ele)
...
>>> res
[1, 2, 3, 5, 4]