[Python] Algoritmo in CSV
Matteo Mattsteel Vitturi
mattsteel a hotmail.it
Mar 7 Set 2010 10:59:05 CEST
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.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.
> >
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20100907/9afd7746/attachment-0001.htm
Maggiori informazioni sulla lista
Python