2010-02-22 13 views

Trả lời

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

rằng sẽ là tốt cho những gì bạn cần phải làm gì?

+0

ofcourse, thats những gì tôi đã thử nhưng tôi cần một phương pháp dễ đọc hơn và hiệu quả hơn. :) – 3zzy

1

or không hoạt động theo cách đó. 'string1' or 'string2' or 'string3' in line tương đương với ('string1') or ('string2') or ('string3' in line), sẽ luôn trả về true (thực tế là 'string1').

Để nhận được hành vi bạn muốn, bạn có thể nói if any(s in line for s in ('string1', 'string2', 'string3')):.

2

Nếu bạn đọc các biểu hiện như thế này

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

Vấn đề trở nên rõ ràng. Điều gì sẽ xảy ra là 'string1' đánh giá là True nên phần còn lại của biểu thức được rút ngắn.

Cách tay dài để viết nó là thế này

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

Đó là một chút lặp đi lặp lại, vì vậy trong trường hợp này nó tốt hơn để sử dụng any() như trong câu trả lời Ignacio của

0

Sử dụng maplambda

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 

chức năng đặt hàng cao

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 
Các vấn đề liên quan