Utilizando Python 3, tengo una lista que contiene más de 100.000 cadenas (lista1), cada una de 300 caracteres como máximo. También tengo una lista de más de 9 millones de subcadenas (list2) -. Quiero contar el número de elementos de una subcadena en lista2 aparece en, por ejemplo,Fast String dentro de List Searching
list1 = ['cat', 'caa', 'doa', 'oat']
list2 = ['at', 'ca', 'do']
Quiero que la función retorne (asignada a lista2) :
[2, 2, 1]
Normalmente, esto es muy simple y requiere muy poco. Sin embargo, debido al tamaño masivo de las listas, tengo problemas de eficiencia. Quiero encontrar la forma más rápida de devolver esa lista de contador.
He intentado listas de comprensiones, generadores, mapas, bucles de todo tipo y todavía tengo que encontrar una manera rápida de hacer esta tarea fácil. ¿Cuál es, teóricamente, la forma más rápida de completar este objetivo, de preferencia tomando los pasos O(len(list2))
muy rápidamente?
Esa es una buena idea, pero cada subcadena en list2 está en al menos un elemento de list1. – user1104160
Esto requerirá una gran sobrecarga, pero podría tratar de indexar tanto 'list1' como' list2' en función de los caracteres que tienen, de modo que si una entrada de 'list1' es' 'abcd'' no verificaría el 'list2' entry' 'efg'', solo las entradas 'list2' que caen bajo la ruta/bifurcación de''a'', '' b'',' 'c'' o '' d'' – puk
Lo mismo Sin embargo, se tomarían muchos pasos, ¿no? En este momento, para cada subcadena en list2 cuento por 'sum (1 para string en list1 if substring en string)'. ¿No tomaría el proceso de verificar los caracteres no incluidos el mismo tiempo que el enunciado if/in? – user1104160