Cómo comprobar si una cadena es una subcadena de elementos en una lista de cadenas
¿ Cómo busco elementos que contengan la cadena 'abc'
en la siguiente lista?
xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
Lo siguiente comprueba si 'abc'
está en la lista, pero no detecta 'abc-123'
y 'abc-456'
:
if 'abc' in xs:
Para comprobar la presencia de 'abc'
en cualquier cadena de la lista:
xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
if any("abc" in s for s in xs):
...
Para obtener todos los artículos que contienen 'abc'
:
matching = [s for s in xs if "abc" in s]
Simplemente descarte esto: si necesita hacer coincidir más de una cadena, por ejemplo abc
y def
, puede combinar dos comprensiones de la siguiente manera:
matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]
Producción:
['abc-123', 'def-456', 'abc-456']
Úselo filter
para obtener todos los elementos que tienen 'abc'
:
>>> xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
>>> list(filter(lambda x: 'abc' in x, xs))
['abc-123', 'abc-456']
También se puede utilizar una lista por comprensión:
>>> [x for x in xs if 'abc' in x]
Si sólo necesita saber si 'abc' está en uno de los elementos, esta es la forma más corta:
if 'abc' in str(my_list):
Nota: esto supone que 'abc' es un texto alfanumérico. No lo utilice si 'abc' puede ser simplemente un carácter especial (es decir, []', ).
Esta es una pregunta bastante antigua, pero ofrezco esta respuesta porque las respuestas anteriores no abordan elementos de la lista que no son cadenas (o algún tipo de objeto iterable). Dichos elementos provocarían que fallara la comprensión de la lista completa con una excepción.
Para tratar con elegancia dichos elementos de la lista omitiendo los elementos no iterables, utilice lo siguiente:
[el for el in lst if isinstance(el, collections.Iterable) and (st in el)]
entonces, con tal lista:
lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123]
st = 'abc'
aún recibirás los artículos coincidentes ( ['abc-123', 'abc-456']
)
La prueba de iterable puede no ser la mejor. Lo saqué de aquí: En Python, ¿cómo puedo determinar si un objeto es iterable?