El problema: una gran lista estática de cadenas se proporciona como A
, una cadena larga se proporciona como B
, las cadenas en A
son todas muy cortas (una lista de palabras clave), quiero comprobar si cada cadena en A
es una subcadena de B
y obténgalos.búsqueda de cadenas cortas masivas de alto rendimiento en Python
Ahora uso un bucle simple como:
result = []
for word in A:
if word in B:
result.append(word)
Pero es una locura lenta cuando A contiene ~ 500.000 o más elementos.
¿Hay alguna biblioteca o algoritmo que se ajuste a este problema? Hice mi mejor esfuerzo para buscar pero no tuve suerte.
¡Gracias!
sólo una teoría - lo que si se intenta usar 'B.find (palabra)' 'si en lugar de la palabra en B'? Creo que 'in' es rápido si la subcadena está realmente en' B', pero será mucho más lenta si no es una subcadena. 'encontrar' podría ser más rápido. – birryree
@birryree Gracias por el comentario, pero en mis pruebas usando un 'B.find (palabra)' en lugar de 'B' palabra en no hacer ningún esfuerzo en el rendimiento :( –