开发者

How to take two lists and combine them excluding any duplicates?

I'd like to make one list from two separate lists of unique items.

There are other similar questions but there didn't seem to be any that concerned doing this problem effectively since the lists are a few million items long.

Totally unrelated: am I the only one who hates how the tags suggestion box covers up the "post your question" but开发者_如何转开发ton?


Use a 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]


A slightly more efficient way to do it:

>>> 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

The new way is more efficient because it has only one set() instead of 2.


>>> 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])


If someone want to do it without 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


Clean and professional solution:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜