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

Объединение двух списков и удаление дубликатов без удаления дубликатов в исходном списке

У меня есть два списка, которые мне нужно объединить, где во втором списке есть дубликаты первого списка, которые игнорируются... Немного трудно объяснить, поэтому позвольте мне показать пример того, как выглядит код, и что я хочу в результате.

first_list = [1, 2, 2, 5]

second_list = [2, 5, 7, 9]

# The result of combining the two lists should result in this list:
resulting_list = [1, 2, 2, 5, 7, 9]

Вы заметите, что результат имеет первый список, включая два значения "2", но тот факт, что second_list также имеет дополнительные 2 и 5 значения, не добавляется в первый список.

Обычно для чего-то подобного я бы использовал наборы, но набор в first_list очистил бы повторяющиеся значения, которые он уже имеет. Поэтому мне просто интересно, какой лучший/самый быстрый способ достичь этой желаемой комбинации.

Спасибо.

4b9b3361

Ответ 1

Вам нужно добавить в первый список те элементы второго списка, которые не находятся в первых наборах, - это самый простой способ определить, какие элементы они есть:

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

in_first = set(first_list)
in_second = set(second_list)

in_second_but_not_in_first = in_second - in_first

result = first_list + list(in_second_but_not_in_first)
print result  # Prints [1, 2, 2, 5, 9, 7]

Или, если вы предпочитаете однострочные 8 -)

print first_list + list(set(second_list) - set(first_list))

Ответ 2

resulting_list = list(first_list)
resulting_list.extend(x for x in second_list if x not in resulting_list)

Ответ 3

Вы можете использовать наборы:

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

resultList= list(set(first_list) | set(second_list))

print(resultList)
# Results in : resultList = [1,2,5,7,9]

Ответ 4

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

print( set( first_list + second_list ) )

Ответ 5

Вы можете свести это к одной строке кода, если используете numpy:

a = [1,2,3,4,5,6,7]
b = [2,4,7,8,9,10,11,12]

sorted(np.unique(a+b))

>>> [1,2,3,4,5,6,7,8,9,10,11,12]

Ответ 6

resulting_list = first_list + [i for i in second_list if i not in first_list]

Ответ 7

Самый простой для меня это:

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

merged_list = list(set(first_list+second_list))
print(merged_list)

#prints [1, 2, 5, 7, 9]

Ответ 8

Это может помочь

def union(a,b):
    for e in b:
        if e not in a:
            a.append(e)

Функция union объединяет второй список в первый, без дублирования элемента a, если он уже находится в a. Аналогично заданию оператора объединения. Эта функция не изменяется. B. Если a = [1,2,3] b = [2,3,4]. После объединения (a, b) делает a = [1,2,3,4] и b = [2,3,4]

Ответ 9

По рецепту:

result_list = список (set(). union (first_list, second_list))

Ответ 10

Вы также можете комбинировать ответы RichieHindle и Ned Batchelder для алгоритма среднего размера O (m + n), который сохраняет порядок:

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

fs = set(first_list)
resulting_list = first_list + [x for x in second_list if x not in fs]

assert(resulting_list == [1, 2, 2, 5, 7, 9])

Обратите внимание, что x in s имеет худшую сложность O (m), поэтому наихудшая сложность этого кода еще O (m * n).

Ответ 11

    first_list = [1, 2, 2, 5]
    second_list = [2, 5, 7, 9]

    newList=[]
    for i in first_list:
        newList.append(i)
    for z in second_list:
        if z not in newList:
            newList.append(z)
    newList.sort()
    print newList

[1, 2, 2, 5, 7, 9]

Ответ 12

L1 = [1,2,3,3,4,4]
L2 = [3,4,5,6,6,6]
L1.extend(L2)
L3 =[]
[L3.append(num) for num in L1 if num not in L3]
print L3
[1, 2, 3, 4, 5, 6]
[Finished in 0.5s]

Ответ 13

просто как любимый:

resulting_list = list(set(resulting_list))

Ответ 14

list1 = [1, 2, 1]
list2 = [2, 3, 4, 3]

def extendList(list1, list2):
   return list(set(list1+list2))

list12 = extendList(list1, list2)
print(list12)

Вывод: [1, 2, 3, 4]