2

所以说我有以下列表:

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
4

2 回答 2

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]
于 2013-09-15T07:14:42.653 回答
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]
于 2013-09-15T07:16:43.410 回答