str. comienza con una lista de cadenas para probar


183

Estoy tratando de evitar el uso de tantas declaraciones if y comparaciones y simplemente uso una lista, pero no estoy seguro de cómo usarla con 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"

Lo que me gustaría que fuera es:

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

Cualquier ayuda sería apreciada.


77
¡Las respuestas a esta pregunta me recuerdan por qué amo tanto a Python!
— dotancohen

Incluso si necesita hacer varias comprobaciones por algún motivo, debe guardar el resultado de ˋlower () ˋ. No tiene sentido hacerlo una y otra vez.
— Bachsau

Respuestas:


346

str.startswith le permite proporcionar una tupla de cadenas para probar:

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

De los documentos :

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

Regrese Truesi la cadena comienza con el prefix, de lo contrario regrese False. prefixTambién puede ser una tupla de prefijos para buscar.

A continuación se muestra una demostración:

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

3
Y si no es compatible con esto, podría hacerlo de todos modos con anyy un genexp.
— user2357112 es compatible con Monica el

Condicional contrafactual, no "tal vez el OP está en una versión anterior".
— user2357112 es compatible con Monica el

oye, si estoy usando esto como parte de una función, ¿cómo podría hacer que devuelva el elemento de la lista que coincide?
— roastbeeef

@roastbeeef ˋforˋ loop. No hay otras opciones. ;)
— Bachsau

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.