errata corrige: se len(self.ArrChartData) è 3 voglio che il ciclo for venga eseguito tre volte con k=0, 1, 2
Il giorno 04 giugno 2013 10:05, Daniele San Giovanni < sangiovanni.dani...@gmail.com> ha scritto: > Ho fatto al momento la prima modifica e non viene più sollevata l' > eccezione. Quindi dovrebbe andar bene. > Ho però un altro dubbio: > Quando eseguo for i in range(0, len(self.ArrChartData) - 1): > > se len(self.ArrChartData) è 0 voglio che il ciclo for non venga > eseguito. > se len(self.ArrChartData) è 1 voglio che il ciclo for non venga eseguito > una sola volta con k=0 > se len(self.ArrChartData) è 3 voglio che il ciclo for non venga eseguito > tre volte con k=0, 1, 2 > > Si comporta proprio così? > > Grazie > > > > > > Il giorno 04 giugno 2013 02:02, Federico Figus <figus.feder...@gmail.com>ha > scritto: > >> Ciao, >> >> il problema deriva dal fatto che ret è una lista vuota, quindi quando >> cerchi di accedere al suo element ret[k] viene giustamente sollevata >> un'eccezione IndexError proprio perchè il k-esimo elemento non esiste >> (essendo una lista vuota). >> >> Se ho capito bene, ret dovrà essere sempre una lista di >> len(self.ArrChartConfig) - 1 dizionari, che al proprio interno avranno un >> indice 'data' associato ad una lista di len(self.ArrChartData) - 1 liste >> di due elementi, allora dovresti inserire all'inizio del primo ciclo: >> >> ret.append({'data': []}) >> >> per poi fare un >> >> ret[k]['data'].append([xval, yval]) >> >> al posto della riga che solleva l'eccezione. >> >> A mio parere questo metodo non sarebbe ottimale, sia dal punto di vista >> prestazionale (sia in termini di memoria che temporali) sia da quello >> stilistico, potresti utilizzare le list comprehension per ottenere un >> ottimo risultato: >> >> >> def chart(self): >> return [{'data': [[coords[0], coords[1]] for coords in >> self.ArrChartData[:-1]]} >> for _ in xrange(0, len(self.ArrChartConfig) - 1)] >> >> nel caso l'iterable self.ArrCharData contenga solo tuple o liste da 2 >> elementi potresti anche scrive in questo modo >> >> def chart(self): >> return [{'data': [[x, y] for x, y in self.ArrChartData[:-1]]} >> for _ in xrange(0, len(self.ArrChartConfig) - 1)] >> >> >> Spero di averti dato una mano con la risoluzione del tuo problema, fammi >> sapere se funziona (e nel caso di errori dove ho sbagliato) o se c'è >> qualche passaggio non molto chiaro. >> Spero che il sonno non mi abbia giocato qualche brutto scherzo ;) >> >> P.S. se la coppia di coordinate non dovrai modificarla in futuro, ti >> consiglio di usare una tupla per contenerle quindi (val[0], val[1]) >> >> Saluti, >> Federico Figus >> >> _______________________________________________ >> Python mailing list >> Python@lists.python.it >> http://lists.python.it/mailman/listinfo/python >> >> > > > -- > Daniele San Giovanni > -- Daniele San Giovanni
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python