Подтвердить что ты не робот

Как взять два списка и объединить их, исключая любые дубликаты?

Я хотел бы сделать один список из двух отдельных списков уникальных элементов.

Есть и другие подобные вопросы, но, похоже, не было проблем, связанных с эффективностью этой проблемы, поскольку списки составляют несколько миллионов элементов.

Полностью несвязанный: я единственный, кто ненавидит, как окно предложений тегов закрывает кнопку "отправить свой вопрос"?

4b9b3361

Ответ 1

Используйте 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]

Ответ 2

Несколько более эффективный способ сделать это:

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

Новый способ более эффективен, поскольку он имеет только один набор() вместо 2.

Ответ 3

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

Ответ 4

Если кто-то хочет сделать это без 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