如何获取两个列表并将它们组合在一起,不包括任何重复项?

时间:2011-01-12 21:00:37

标签: python

我想从两个独立项目的列表中创建一个列表。

还有其他类似的问题,但似乎没有任何关注有效地解决这个问题,因为这些列表只有几百万个项目。

完全不相关:我是唯一一个讨厌标签建议框如何掩盖“发帖问题”按钮的人吗?

5 个答案:

答案 0 :(得分:32)

使用set

>>> first = [1, 2, 3, 4]
>>> second = [3, 2, 5, 6, 7]
>>> third = list(set(first) | set(second))      # '|' is union
>>> third
[1, 2, 3, 4, 5, 6, 7]

答案 1 :(得分:11)

一种稍微有效的方法:

>>> first = [1, 2, 3, 4]
>>> second = [3, 2, 5, 6, 7]

# New way
>>> list(set(first + second))
[1, 2, 3, 4, 5, 6, 7]
#1000000 loops, best of 3: 1.42 µs per loop

# Old way
>>> list(set(first) | set(second))
[1, 2, 3, 4, 5, 6, 7]
#1000000 loops, best of 3: 1.83 µs per loop

新方式更有效,因为它只有一个set()而不是2。

答案 2 :(得分:6)

>>> l1 = range(10)
>>> l2 = range(5, 15)
>>> set(l1) | set(l2)
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

答案 3 :(得分:2)

如果有人想要在没有set()的情况下执行此操作:

a = [1,2,3]
b = [2,3,4]
newlist=[]
for i in a:
    newlist.append(i)
for z in b:
    if z not in newlist:
        newlist.append(z)
newlist.sort()
print newlist

答案 4 :(得分:0)

干净专业的解决方案:

list = [1, 2, 3]
list1 = [3, 4, 5]
result = list(set().union(list, list1)) # result [1, 2, 3, 4, 5]