[Python] liste in Python errore costruzione matrice

Federico Figus figus.federico a gmail.com
Mar 4 Giu 2013 02:02:14 CEST


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
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130604/b1b157e5/attachment.html>


Maggiori informazioni sulla lista Python