<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
<br>Uhm... sì è vero: in questo caso un set() va meglio di un dict().<br>Comunque, credo anch'io che l'uso di "in" sia meno efficiente di un confronto "<".<br>Però, in sé l'idea era intrigante:<br>Infine, se si conoscesse la massima lunghezza possibile si potrebbe sostiture il dict/set con un sub-array.<br>Anche qui usiamo ciascun indice come "presenza" della lunghezza; in questo modo si sostituiscono i confronti "<" con delle banali assegnazioni... chissà chi è più veloce.<br>M.<br><br>> Il giorno lun, 06/09/2010 alle 22.04 +0200, Matteo Mattsteel Vitturi ha<br>> scritto:<br>> > Io proverei un approccio alternativo e forse più Pythonico... <br>> > Considerando la singola colonna mi aspetto che la "varietà" delle<br>> > lunghezze non sia molto ampia.<br>> > Memorizzerei quindi in un dict tali lunghezze usando come "chiave"<br>> > proprio la lunghezza, in questo modo non faccio alcun confronto ma<br>> > sfrutto la velocità di calcolo della chiave dei dict.<br>> > <br>> > * apri file csv<br>> > * crea un oggetto csv_reader<br>> > * crea un array i cui elementi sono dict (uno per ogni campo)<br>> > * leggi riga per riga<br>> > * fai lo split dei campi e metti nell'array "campi"<br>> > * per ogni campo di "campi" calcola la lunghezza e segna una "x" nel<br>> > dict con chiave = lunghezza.<br>> > * alla fine di tutto, esamina le (poche) chiavi di ciascun dict per<br>> > determinare la max lunghezza di ciascun campo.<br>> > <br>> > Se ho due minuti provo a buttar giù un esempio di codice.<br>> <br>> Intrigante... anche se la mia impressione così al volo è che sostituisci<br>> n invocazioni a<br>> "lunghezza > max_lunghezza?"<br>> con n invocazioni a<br>> "il dizionario contiene già il valore di lunghezza?"<br>> e che la seconda è più costosa anche nel caso di un dizionario con pochi<br>> elementi.<br>> <br>> In ogni caso se dovessi seguire questo approccio mi butterei su un set<br>> invece che un dict... non conosco i dettagli implementativi, ma (sempre<br>> in teoria) un dict è un po' uno spreco per quel che ti serve.<br>> <br>> ciao<br>> <br>> Pietro<br>> <br>> <br>> > <br>> > Matteo.<br>> > ______________________________________________________________________<br>> > From: vittorio.zuccala@gmail.com<br>> > Date: Thu, 2 Sep 2010 14:41:10 +0200<br>> > To: python@lists.python.it<br>> > Subject: [Python] Algoritmo in CSV<br>> > <br>> > Buongiorno,<br>> > chiedo consiglio su un algoritmo da usare che sia veloce.<br>> > Anche solo in meta-codice.<br>> > <br>> > Problema:<br>> > - carico un CSV con 200 colonne e 2 milioni di righe<br>> > - voglio trovare la lunghezza maggiore per ogni campo<br>> > <br>> > Meta-codice<br>> > * apri file csv<br>> > * crea un oggetto csv_reader<br>> > * crea un array "lunghezzamax"<br>> > * leggi riga per riga<br>> > * fai lo split dei campi e metti nell'array "campi"<br>> > * per ogni campo guarda la lunghezza: se lunghezza(campi[i]) ><br>> > lunghezza[i] allora lunghezza[i]=lunghezza(campi[i]) <br>> > <br>> > Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e<br>> > la cosa non mi piace molto.<br>> > Qualcuno ha un consiglio per ottimizzare?<br>> > <br>> > Grazie in anticipo.<br>> > <br><br>                                            </body>
</html>