테스트 할 문자열 목록으로 str.starts 문과 비교를 사용하지 않고 단순히 목록을 사용하려고하지만

너무 많은 if 문과 비교를 사용하지 않고 단순히 목록을 사용하려고하지만 목록과 함께 사용하는 방법을 잘 모르겠습니다 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"

내가 원하는 것은 다음과 같습니다.

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

도움을 주시면 감사하겠습니다.



답변

str.startswith 테스트 할 문자열 튜플을 제공 할 수 있습니다.

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

로부터 문서 :

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

반환 True와 캐릭터가 시작될 경우 prefix, 그렇지 않으면 반환 False. prefix찾을 접두사의 튜플 일 수도 있습니다.

아래는 데모입니다.

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


답변

당신은 또한 사용할 수 있습니다 any(), map()과 같이 :

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

또는 발전기 표현식을 사용하여 :

if any(l.startswith(s) for s in x)
    pass # Do something


답변