str.startswith z listą ciągów do przetestowania


183

Staram się unikać używania tak wielu instrukcji if i porównań i po prostu używam listy, ale nie wiem, jak jej używać z str.startswith:

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"

Chciałbym, żeby to było:

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

Każda pomoc będzie mile widziana.


7
Odpowiedzi na to pytanie przypominają mi, dlaczego tak bardzo kocham Pythona!
dotancohen

Nawet jeśli z jakiegoś powodu musisz wykonać kilka sprawdzeń, powinieneś zapisać wynik ˋlower () ˋ. Nie ma sensu robić tego raz po raz.
Bachsau

Odpowiedzi:


346

str.startswith pozwala na dostarczenie krotki ciągów do przetestowania pod kątem:

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

Z dokumentów :

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

Zwróć, Truejeśli ciąg zaczyna się od prefix, w przeciwnym razie zwróć False. prefixmoże być również krotką przedrostków, których należy szukać.

Poniżej znajduje się demonstracja:

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

3
A jeśli to nie obsługuje, możesz to zrobić i tak z anygenexpem.
user2357112 obsługuje Monikę

Warunek alternatywny, a nie „może PO jest w starej wersji”.
user2357112 obsługuje Monikę

hej, jeśli używam tego jako części funkcji, jak mogę sprawić, aby zwrócił element z listy, który jest dopasowany?
roastbeeef

@roastbeeef ˋforˋ loop. Żadnych innych opcji. ;)
Bachsau

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.