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.