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.zucc...@gmail.com > Date: Thu, 2 Sep 2010 14:41:10 +0200 > To: python@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@lists.python.it http://lists.python.it/mailman/listinfo/python > _______________________________________________ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python