Encuentra la cadena de texto dentro de una lista que contiene múltiples patrones.
str_list = ['Alex is a good boy',
'Ben is a good boy',
'Charlie is a good boy']
matches = ['Charlie','good']
Quiero devolver el tercer elemento en str_list
, porque contiene tanto ‘Charlie’ como ‘good’.
He intentado:
[s for s in str_list if all([m in s for m in matches])][0]
Pero esto me parece demasiado verboso. Por favor, una solución más elegante.
Basándonos en la respuesta y comentarios anteriores, tenemos:
next(s for s in str_list if all(m in s for m in matches))
Es obviamente más rápido (aunque mínimamente) y más ordenado.
davy.ai
Para devolver el tercer elemento en
str_list
, que contiene tanto'Charlie'
como'good'
, una solución más elegante sería:Esto utiliza una expresión generadora y la función
next()
para devolver el primer elemento que cumple la condición de tener tanto'Charlie'
como'good'
en él. Es más corto y legible que la solución anterior, y también es más rápido (aunque solo marginalmente).