[Python] Algoritmo in CSV

Pietro Battiston me a pietrobattiston.it
Lun 6 Set 2010 23:52:32 CEST


Il giorno lun, 06/09/2010 alle 22.04 +0200, Matteo Mattsteel Vitturi ha
scritto:
> Io proverei un approccio alternativo e forse più Pythonico... 
> Considerando la singola colonna mi aspetto che la "varietà" delle
> lunghezze non sia molto ampia.
> Memorizzerei quindi in un dict tali lunghezze usando come "chiave"
> proprio la lunghezza, in questo modo non faccio alcun confronto ma
> sfrutto la velocità di calcolo della chiave dei dict.
> 
> * apri file csv
> * crea un oggetto csv_reader
> * crea un array i cui elementi sono dict (uno per ogni campo)
> * leggi riga per riga
> * fai lo split dei campi e metti nell'array "campi"
> * per ogni campo di "campi" calcola la lunghezza e segna una "x" nel
> dict con chiave = lunghezza.
> * alla fine di tutto, esamina le (poche) chiavi di ciascun dict per
> determinare la max lunghezza di ciascun campo.
> 
> Se ho due minuti provo a buttar giù un esempio di codice.

Intrigante... anche se la mia impressione così al volo è che sostituisci
n invocazioni a
"lunghezza > max_lunghezza?"
con n invocazioni a
"il dizionario contiene già il valore di lunghezza?"
e che la seconda è più costosa anche nel caso di un dizionario con pochi
elementi.

In ogni caso se dovessi seguire questo approccio mi butterei su un set
invece che un dict... non conosco i dettagli implementativi, ma (sempre
in teoria) un dict è un po' uno spreco per quel che ti serve.

ciao

Pietro


> 
> Matteo.
> 
> 
> 
> ______________________________________________________________________
> From: vittorio.zuccala a gmail.com
> Date: Thu, 2 Sep 2010 14:41:10 +0200
> To: python a lists.python.it
> Subject: [Python] Algoritmo in CSV
> 
> Buongiorno,
> chiedo consiglio su un algoritmo da usare che sia veloce.
> Anche solo in meta-codice.
> 
> Problema:
> - carico un CSV con 200 colonne e 2 milioni di righe
> - voglio trovare la lunghezza maggiore per ogni campo
> 
> Meta-codice
> * apri file csv
> * crea un oggetto csv_reader
> * crea un array "lunghezzamax"
> * leggi riga per riga
> * fai lo split dei campi e metti nell'array "campi"
> * per ogni campo guarda la lunghezza: se lunghezza(campi[i]) >
> lunghezza[i] allora lunghezza[i]=lunghezza(campi[i]) 
> 
> Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e
> la cosa non mi piace molto.
> Qualcuno ha un consiglio per ottimizzare?
> 
> Grazie in anticipo.
> 
> 
> _______________________________________________ Python mailing list
> Python a lists.python.it http://lists.python.it/mailman/listinfo/python 
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python




Maggiori informazioni sulla lista Python