[Python] liste in Python errore costruzione matrice

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


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.daniele a 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.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
>



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


Maggiori informazioni sulla lista Python