Python 3.3函数将多个列表中的唯一值合并到一个列表中

use*_*215 12 python merge function list python-3.3

我是Python新手.我正在尝试编写一个函数,将单独列表中的唯一值合并到一个列表中.我一直得到一个列表元组的结果.最后,我想从我的三个列表-a,b,c中得到一个唯一值列表.任何人都可以帮我一把吗?

def merge(*lists):
    newlist = lists[:]
    for x in lists:
        if x not in newlist:
            newlist.extend(x)
    return newlist

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

print(merge(a,b,c))
Run Code Online (Sandbox Code Playgroud)

我得到了一个列表元组

([1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8])
Run Code Online (Sandbox Code Playgroud)

g.d*_*d.c 16

你可能只需要套装:

>>> a = [1,2,3,4]
>>> b = [3,4,5,6]
>>> c = [5,6,7,8]
>>>
>>> uniques = set( a + b + c )
>>> uniques
set([1, 2, 3, 4, 5, 6, 7, 8])
>>>
Run Code Online (Sandbox Code Playgroud)


lvc*_*lvc 5

如果您不关心它们是否按原始顺序排列,最简单且可能是禁食的方法是使用 set 函数:

>>> set().union(a, b, c)
{1, 2, 3, 4, 5, 6, 7, 8}
Run Code Online (Sandbox Code Playgroud)

如果您确实关心原始顺序(在这种情况下集合碰巧保留它,但不能保证),那么您可以通过意识到参数lists包含您传入的所有原始列表的元组来修复您的原始尝试. 这意味着迭代它一次一个,而不是其中的元素 - 您可以使用 itertools 模块解决这个问题:

for x in itertools.chain.from_iterable(lists):
   if x not in newlist:
      newlist.append(x)
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望newlist从一个空列表而不是输入列表的副本开始。