it-swarm.com.de

Kombinieren von zwei Listen und Entfernen von Duplikaten

Ich habe zwei Listen, die ich kombinieren muss, wenn in der zweiten Liste Duplikate der ersten Liste ignoriert wurden. Etwas schwer zu erklären, lassen Sie mich ein Beispiel zeigen, wie der Code aussieht und was ich als Ergebnis möchte.

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]

Sie werden feststellen, dass das Ergebnis die erste Liste enthält, einschließlich die beiden Werte "2". Die Tatsache, dass second_list auch einen zusätzlichen Wert 2 und 5 enthält, wird nicht zur ersten Liste hinzugefügt.

Normalerweise würde ich für so etwas Sets verwenden, aber ein Set auf first_list würde die doppelten Werte bereinigen, die es bereits hat. Also frage ich mich einfach, auf welche Weise der beste/schnellste Weg zu dieser gewünschten Kombination kommt.

Vielen Dank.

69
Lee Olayvar

Sie müssen die Elemente der zweiten Liste, die nicht zu den ersten gehören, an die erste Liste anhängen. Dies ist der einfachste Weg, um festzustellen, um welche Elemente es sich handelt:

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]

Oder wenn Sie Einliner bevorzugen 8-)

print first_list + list(set(second_list) - set(first_list))
121
RichieHindle
resulting_list = list(first_list)
resulting_list.extend(x for x in second_list if x not in resulting_list)
41
Ned Batchelder

Sie können Sets verwenden:

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

Sie können dies auf eine einzige Codezeile reduzieren, wenn Sie numpy verwenden:

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]
4
mosegui
first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

print( set( first_list + second_list ) )
3
jms

Am einfachsten für mich ist:

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]
3
Rafiq
resulting_list = first_list + [i for i in second_list if i not in first_list]
3
Daniel Roseman

Das könnte helfen 

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

Die Vereinigungsfunktion führt die zweite Liste in die erste Liste ein, ohne dass ein Element von a dupliziert wird, wenn es bereits in a ist. Ähnlich wie der Union-Operator. Diese Funktion ändert sich nicht. B. Wenn a = [1,2,3] b = [2,3,4] Nach Vereinigung (a, b) ergibt sich a = [1,2,3,4] und b = [2,3,4]

2
VeilEclipse

Sie können auch die Antworten von RichieHindle und Ned Batchelder für einen Average-Case O (m + n) - Algorithmus kombinieren, der die Reihenfolge beibehält:

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

Beachten Sie, dass x in s eine Worst-Case-Komplexität von O(m) hat, daher ist die Worst-Case -Komplexität dieses Codes immer noch O (m * n)..

1
z0r

einfach wie geliebt:

resulting_list = list(set(resulting_list))

0
mosi_kha

Basierend auf dem Rezept

result_list = list (set (). union (erste_liste, zweite_liste))

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

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

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

Ausgabe: [1, 2, 3, 4]

0
Raviteja
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]
0
srujan kumar
    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]

0
user4846254