Uhm... sì è vero: in questo caso un set() va meglio di un dict(). Comunque, credo anch'io che l'uso di "in" sia meno efficiente di un confronto "<". Però, in sé l'idea era intrigante: Infine, se si conoscesse la massima lunghezza possibile si potrebbe sostiture il dict/set con un sub-array. Anche qui usiamo ciascun indice come "presenza" della lunghezza; in questo modo si sostituiscono i confronti "<" con delle banali assegnazioni... chissà chi è più veloce. M.
> 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