Compruebe si existen varias cadenas en otra cadena
¿Cómo puedo comprobar si alguna de las cadenas de una matriz existe en otra cadena?
Por ejemplo:
a = ['a', 'b', 'c']
s = "a123"
if a in s:
print("some of the strings found in s")
else:
print("no strings found in s")
¿Cómo puedo reemplazar la if a in s:
línea para obtener el resultado adecuado?
Puedes usar any
:
a_string = "A string is more than its parts!"
matches = ["more", "wholesome", "milk"]
if any(x in a_string for x in matches):
De manera similar, para verificar si se encuentran todasall
las cadenas de la lista, use en lugar de any
.
any()
es, con diferencia, el mejor enfoque si todo lo que desea es True
o False
, pero si desea saber específicamente qué cadena/cadenas coinciden, puede usar un par de cosas.
Si quieres la primera coincidencia (por False
defecto):
match = next((x for x in a if x in a_string), False)
Si desea obtener todas las coincidencias (incluidos los duplicados):
matches = [x for x in a if x in a_string]
Si desea obtener todas las coincidencias no duplicadas (sin tener en cuenta el orden):
matches = {x for x in a if x in a_string}
Si desea obtener todas las coincidencias no duplicadas en el orden correcto:
matches = []
for x in a:
if x in a_string and x not in matches:
matches.append(x)
Debes tener cuidado si las cuerdas se alargan a
o str
se alargan. Las soluciones sencillas toman O(S*(A^2)), donde S
es la longitud de str
y A es la suma de las longitudes de todas las cadenas en a
. Para obtener una solución más rápida, consulte el algoritmo de Aho-Corasick para la coincidencia de cadenas, que se ejecuta en tiempo lineal O(S+A).