Prüfen ob ein Element der Liste a in Liste b enthalten ist

05/12/2007 - 08:09 von Rene Maurer | Report spam
Hallo

Ich möchte herausfinden ob irgendein Element der Liste a in der Liste b
enthalten ist. Gibt es dafür etwas Eleganteres als

xl=[1,2,3]
yl=[3,4,5]
found=False
for x in xl:
if x in yl:
found=True
break
print found, x

Und b könnte auch ein dictionary sein und ich möchte dann prüfen, ob ein
Element von a in b als key (oder value) vorhanden ist.

Gruss René
 

Lesen sie die antworten

#1 Marc BlackJack Rintsch
05/12/2007 - 08:34 | Warnen spam
On Wed, 05 Dec 2007 08:09:10 +0100, Rene Maurer wrote:

Ich möchte herausfinden ob irgendein Element der Liste a in der Liste b
enthalten ist. Gibt es dafür etwas Eleganteres als

xl=[1,2,3]
yl=[3,4,5]
found=False
for x in xl:
if x in yl:
found=True
break
print found, x



Hier passt die Problembeschreibung nicht ganz zum Quelltext. Du tust da
mehr als nur heraus zu finden *ob* ein Element aus `a` in `b` enthalten
ist, Du gibst auch noch aus *welches* das ist. Wenn wirklich nur das "ob"
interessant ist:

def contains_any(xs, ys):
return any(x in ys for x in xs)

xl = [1, 2, 3]
yl = [3, 4, 5]
print contains_any(xl, set(yl))

Ansonsten wird es wohl eine Schleife werden.

def get_element_in_both(xs, ys):
for x in xs:
if x in ys:
return x
raise ValueError

xl = [1, 2, 3]
yl = [3, 4, 5]
try:
x = get_element_in_both(xl, set(yl))
except ValueError:
print 'Not found'
else:
print 'Found', x

Wobei man in beiden Fàllen sicherstellen sollte, dass der "enthalten sein
Test" beim zweiten Argument möglichst Effizient ist, also zum Beispiel
`set()` oder Schlüssel in einem `dict()` und nicht eine Liste mit linearer
Laufzeit bei dem Test.

Ciao,
Marc 'BlackJack' Rintsch

Ähnliche fragen