Функция 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))

Я получаю Tuple of Lists

([1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8])

Ответ 1

Вам могут понадобиться только наборы:

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

Ответ 2

Если вы не заботитесь о том, чтобы они находились в первоначальном порядке, самый простой и вероятный способ - использовать функции набора:

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

Если вы заботитесь о первоначальном заказе (наборы, как правило, сохраняют его в этом случае, но не гарантируются), вы можете исправить свою первоначальную попытку, осознав, что аргумент lists содержит кортеж всех исходные списки, в которые вы проходили. Это означает, что итерация по нему получает каждый из этих списков по одному, а не элементы в них - вы можете исправить это, используя модуль itertools:

for x in itertools.chain.from_iterable(lists):
   if x not in newlist:
      newlist.append(x)

Кроме того, вы хотели бы, чтобы newlist начинался как пустой список, а не копия входных списков.

Ответ 3

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

merge_list = merge(a,b,c,d)

merge_list = set(merge_list)

merge_list = list(merge_list)

print(merge_list)