2013-12-09 19 views
78

Tôi đang cố gắng để tránh sử dụng quá nhiều nếu báo cáo và so sánh và chỉ cần sử dụng một danh sách, nhưng không chắc chắn làm thế nào để sử dụng nó với str.startswith:str.startswith với một danh sách các chuỗi để kiểm tra

if link.lower().startswith("js/") or link.lower().startswith("catalog/") or link.lower().startswith("script/") or link.lower().startswith("scripts/") or link.lower().startswith("katalog/"): 
    # then "do something" 

Những gì tôi muốn nó là:

if link.lower().startswith() in ["js","catalog","script","scripts","katalog"]: 
    # then "do something" 

Bất kỳ trợ giúp nào sẽ được đánh giá cao.

+2

Những câu trả lời này câu hỏi nhắc tôi về lý do tại sao tôi yêu Python rất nhiều! – dotancohen

Trả lời

154

str.startswith cho phép bạn cung cấp một tuple của chuỗi để kiểm tra:

if link.lower().startswith(("js", "catalog", "script", "katalog")): 

Từ docs:

str.startswith(prefix[, start[, end]])

Return True nếu chuỗi bắt đầu với prefix, nếu không trở lại False. prefix cũng có thể là một tuple các tiền tố để tìm kiếm.

Dưới đây là một minh chứng:

>>> "abcde".startswith(("xyz", "abc")) 
True 
>>> prefixes = ["xyz", "abc"] 
>>> "abcde".startswith(tuple(prefixes)) # You must use a tuple though 
True 
>>> 
+2

Và nếu nó không hỗ trợ điều này, bạn có thể làm điều đó anyway với 'any' và genexp. – user2357112

+0

Phản hồi có điều kiện, không phải "có thể OP trên phiên bản cũ". – user2357112

11

Bạn cũng có thể sử dụng any(), map() như vậy:

if any(map(l.startswith, x)): 
    pass # Do something 

Hoặc cách khác, sử dụng list comprehension:

if any([l.startswith(s) for s in x]) 
    pass # Do something 
Các vấn đề liên quan