所以说我有以下列表:
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
答案 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]