2010-02-22 3 views

Antwort

20
if any(s in line for s in ('string1', 'string2', ...)): 
1
if 'string1' in line or 'string2' in line or 'string3' in line: 

Wäre das für in Ordnung sein, was Sie tun müssen?

+0

Natürlich, das ist, was ich versuchte, aber ich brauchte eine lesbarere und effizientere Methode. :) – 3zzy

1

or verhält sich nicht so. 'string1' or 'string2' or 'string3' in line entspricht ('string1') or ('string2') or ('string3' in line), die immer wahr (tatsächlich, 'string1') zurückgibt. Um das gewünschte Verhalten zu erhalten, können Sie if any(s in line for s in ('string1', 'string2', 'string3')): sagen.

2

Wenn Sie den Ausdruck wie dies

if ('string1') or ('string2') or ('string3' in line): 

Das Problem gelesen wird offensichtlich. Was passiert, ist, dass "string1" zu True ausgewertet wird, so dass der Rest des Ausdrucks kurzgeschlossen ist.

Der lange Hand Weg, es zu schreiben, ist dies

if 'string1' in line or 'string2' in line or 'string3' in line: 

Welche etwas eintönig ist, so dass in diesem Fall ist es besser, any() wie Antwort des in Ignacio verwenden

0

Mit map und lambda

a = ["a", "b", "c"] 
b = ["a", "d", "e"] 
c = ["1", "2", "3"] 

# any element in `a` is a element of `b` ? 
any(map(lambda x:x in b, a)) 
>>> True 

# any element in `a` is a element of `c` ? 
any(map(lambda x:x in c, a)) # any element in `a` is a element of `c` ? 
>>> False 

und höherwertige Funktion

has_any = lambda b: lambda a: any(map(lambda x:x in b, a)) 

# using ... 
f1 = has_any([1,2,3,]) 
f1([3,4,5,]) 
>>> True 
f1([6,7,8,]) 
>>> False