Utilizzando Python 3, ho una lista contenente oltre 100.000 stringhe (lista1), ciascuna di lunghezza massima di 300 caratteri. Ho anche una lista di oltre 9 milioni di sottostringhe (list2) -. Voglio contare quanti elementi di una stringa in lista2 appare in Per esempio,Fast String all'interno di Ricerca elenco
list1 = ['cat', 'caa', 'doa', 'oat']
list2 = ['at', 'ca', 'do']
Voglio la funzione per tornare (mappato a list2) :
[2, 2, 1]
Normalmente, questo è molto semplice e richiede pochissimo. Tuttavia, a causa delle enormi dimensioni degli elenchi, ho problemi di efficienza. Voglio trovare il modo più veloce per restituire quella lista contatore.
Ho provato list comprehensions, generatori, mappe, loop di tutti i tipi e non ho ancora trovato un modo veloce per fare questo compito facile. Qual è in teoria il modo più veloce per completare questo obiettivo, preferibilmente prendendo i passi O(len(list2))
molto rapidamente?
Questa è una buona idea, ma ogni sottostringa in list2 è in almeno un elemento di list1. – user1104160
Ciò richiederà un notevole sovraccarico, ma si potrebbe provare l'indicizzazione di 'list1' e' list2' in base ai caratteri che hanno, quindi se una voce di 'list1' è' 'abcd'' non verrebbe 'lista2' voce' 'efg'', solo le voci 'lista2' che ricadono sotto il percorso/ramo di' 'a'','' b'', ''c'' o'' d'' – puk
Lo stesso la quantità di passi sarebbe stata presa però, giusto? In questo momento, per ogni sottostringa in list2 conto per 'sum (1 per string in list1 se substring in stringa)'. Il processo di verifica dei caratteri non inclusi non richiederebbe la stessa quantità di tempo dell'istruzione if/in? – user1104160