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