[Python] liste in Python errore costruzione matrice

Daniele San Giovanni sangiovanni.daniele a gmail.com
Mar 4 Giu 2013 10:05:31 CEST


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.federico a 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 a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>


-- 
Daniele San Giovanni
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130604/cc8dd59e/attachment.html>


Maggiori informazioni sulla lista Python