Compruebe si existen varias cadenas en otra cadena

Resuelto jahmax asked hace 14 años • 19 respuestas

¿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?

jahmax avatar Aug 02 '10 23:08 jahmax
Aceptado

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.

Mark Byers avatar Aug 02 '2010 16:08 Mark Byers

any()es, con diferencia, el mejor enfoque si todo lo que desea es Trueo False, pero si desea saber específicamente qué cadena/cadenas coinciden, puede usar un par de cosas.

Si quieres la primera coincidencia (por Falsedefecto):

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)
zondo avatar May 23 '2016 22:05 zondo

Debes tener cuidado si las cuerdas se alargan ao strse alargan. Las soluciones sencillas toman O(S*(A^2)), donde Ses la longitud de stry 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).

jbernadas avatar Aug 02 '2010 19:08 jbernadas