Sto cercando paese per intervallo IP per decine di milioni di righe. Sto cercando un modo più veloce per fare la ricerca.Qual è un modo più rapido per cercare un valore in un elenco di tuple?
devo 180K tuple in questa forma:
>>> data = ((0, 16777215, 'ZZ'),
... (1000013824, 1000079359, 'CN'),
... (1000079360, 1000210431, 'JP'),
... (1000210432, 1000341503, 'JP'),
... (1000341504, 1000603647, 'IN'))
(Gli interi sono indirizzi IP convertiti in numeri semplici.)
Questo fa il lavoro giusto, ma semplicemente vuole troppo tempo:
>>> ip_to_lookup = 999
>>> country_result = [country
... for (from, to, country) in data
... if (ip_to_lookup >= from) and
... (ip_to_lookup <= to)][0]
>>> print country_result
ZZ
Qualcuno può indicarmi la direzione giusta per un modo più veloce di fare questa ricerca? Utilizzando il metodo sopra, 100 ricerche impiegano 3 secondi. Significa, credo, 10 milioni di righe richiederanno diversi giorni.
prima ovvia micro-ottimizzazione: 'country_result = prossimo (paese per da, paese nei dati se ip_to_lookup> = da e ip_to_lookup <= a)' – agf
Seconda: Ordina il 'data' modo che solo bisogno per testare il limite inferiore - non appena lo hai attraversato, sei nella giusta fascia. – agf
'from' è una parola chiave e non può essere utilizzato come nome di variabile. –