2013-12-09 15 views
78

zu testen Ich versuche, mit so vielen zu vermeiden, wenn Aussagen und Vergleiche und einfach eine Liste verwenden, aber nicht sicher, wie es zu benutzen mit str.startswith:str.startswith mit einer Liste von Strings für

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" 

Was ich möchte es ist:

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

Jede Hilfe wäre willkommen.

+2

Die Antworten dazu Frage erinnere mich daran, warum ich Python so sehr liebe! – dotancohen

Antwort

154

str.startswith ermöglicht es Ihnen, ein Tupel von Strings zu liefern zu testen:

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

Vom docs:

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

Return True, wenn der String mit dem prefix beginnt, andernfalls Rückkehr False. prefix kann auch ein Tupel von Präfixen sein, nach denen gesucht werden soll.

Unten finden Sie eine Demonstration:

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

Und wenn es das nicht unterstützt, könntest du es trotzdem mit 'any' und einem genexp machen. – user2357112

+0

Kontrafaktisches Konditional, nicht "vielleicht ist das OP auf einer alten Version". – user2357112

11

Sie auch any() verwenden können, map() wie so:

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

oder alternativ mit list comprehension:

if any([l.startswith(s) for s in x]) 
    pass # Do something 
Verwandte Themen