Python:以函数式编程方式组合两个列表并删除重复项

Dan*_*elR 2 python functional-programming

我正在尝试编写一个函数,该函数可以在删除重复项的同时合并两个列表,但是以纯函数方式。例如:

a = [1,2,2]
b = [1,3,3,4,5,0]
union(a,b) --> [1,2,3,4,5,0]
Run Code Online (Sandbox Code Playgroud)

代码的命令式形式是:

def union(a,b):
    c = []
    for i in a + b:
        if i not in c:
            c.append(i)
    return c
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法,但找不到不使用循环遍历项目的方法 - 我错过了什么?

小智 8

list(set(a + b))
Run Code Online (Sandbox Code Playgroud)

这结合了两个列表ab并且 usingset只需要唯一的值,然后我们可以将其返回到list.


Kas*_*mvd 4

如果你想保留顺序可以使用collections.OrderedDict,否则就使用set。这些数据结构使用其项目的哈希值来保存它们,因此它们不会保留重复项。

In [11]: from collections import OrderedDict

In [12]: list(OrderedDict.fromkeys(a+b))
Out[12]: [1, 2, 3, 4, 5, 0]
Run Code Online (Sandbox Code Playgroud)