1260 Stimmen

Unterschied zwischen zwei Listen ermitteln

Ich habe zwei Listen in Python:

temp1 = ['One', 'Two', 'Three', 'Four']
temp2 = ['One', 'Two']

Ich möchte eine dritte Liste mit Elementen aus der ersten Liste erstellen, die nicht in der zweiten Liste enthalten sind:

temp3 = ['Three', 'Four']

Gibt es einen schnellen Weg ohne Zyklen und Kontrollen?

3voto

Nick Franceschina Punkte 5689

Wenn Sie etwas mehr wie ein Changeset wollen... könnten Sie Counter verwenden

from collections import Counter

def diff(a, b):
  """ more verbose than needs to be, for clarity """
  ca, cb = Counter(a), Counter(b)
  to_add = cb - ca
  to_remove = ca - cb
  changes = Counter(to_add)
  changes.subtract(to_remove)
  return changes

lista = ['one', 'three', 'four', 'four', 'one']
listb = ['one', 'two', 'three']

In [127]: diff(lista, listb)
Out[127]: Counter({'two': 1, 'one': -1, 'four': -2})
# in order to go from lista to list b, you need to add a "two", remove a "one", and remove two "four"s

In [128]: diff(listb, lista)
Out[128]: Counter({'four': 2, 'one': 1, 'two': -1})
# in order to go from listb to lista, you must add two "four"s, add a "one", and remove a "two"

2voto

fgaim Punkte 136

Dies kann mit einer Zeile gelöst werden. Die Frage ist zwei Listen (temp1 und temp2) gegeben, deren Differenz in einer dritten Liste (temp3) zurückgegeben wird.

temp3 = list(set(temp1).difference(set(temp2)))

1voto

S.K. Venkat Punkte 1623

Hier ist ein einfacher Weg, um zwei Listen (unabhängig von ihrem Inhalt) zu unterscheiden, Sie können das Ergebnis wie unten gezeigt erhalten:

>>> from sets import Set
>>>
>>> l1 = ['xvda', False, 'xvdbb', 12, 'xvdbc']
>>> l2 = ['xvda', 'xvdbb', 'xvdbc', 'xvdbd', None]
>>>
>>> Set(l1).symmetric_difference(Set(l2))
Set([False, 'xvdbd', None, 12])

Ich hoffe, dies ist hilfreich.

0voto

mr potato head Punkte 1

Sie können die erste Liste durchgehen und jedes Element, das nicht in der zweiten Liste, aber in der ersten Liste enthalten ist, der dritten Liste hinzufügen. Z.B.:

temp3 = []
for i in temp1:
    if i not in temp2:
        temp3.append(i)
print(temp3)

-2voto

csg Punkte 7958
def diffList(list1, list2):     # returns the difference between two lists.
    if len(list1) > len(list2):
        return (list(set(list1) - set(list2)))
    else:
        return (list(set(list2) - set(list1)))

z.B. wenn list1 = [10, 15, 20, 25, 30, 35, 40] y list2 = [25, 40, 35] dann wird die zurückgegebene Liste sein output = [10, 20, 30, 15]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X