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

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

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 очистил бы повторяющиеся значения, которые он уже имеет. Поэтому мне просто интересно, какой лучший / самый быстрый способ достичь этой желаемой комбинации.

Благодарю.

7 Solutions collect form web for “Объединение двух списков и удаление дубликатов без удаления дубликатов в исходном списке”

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

 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] 

Или если вы предпочитаете однострочные 😎

 print first_list + list(set(second_list) - set(first_list)) 
 resulting_list = list(first_list) resulting_list.extend(x for x in second_list if x not in resulting_list) 

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

 first_list = [1, 2, 2, 5] second_list = [2, 5, 7, 9] resultList= List(set(first_list)|set(second_list)) resultList=[1,2,5,7,9] 
 resulting_list = first_list + [i for i in second_list if i not in first_list] 

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

 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]

  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]

Вы также можете комбинировать ответы 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) .

  • Я хочу группировать кортежи на основе аналогичных атрибутов
  • разделять элементы в списке
  • Python - проверка того, является ли один список подмножеством другого
  • Использование pop для удаления элемента из 2D-массива
  • Python - понимание слов для слов, которые состоят не только из цифр
  • Как я могу получить доступ к каждому элементу пары в списке пар?
  • Транспонирование вложенного списка в python
  • Как разгадать массив?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.