"Rogério Brito" <rbr...@ime.usp.br> wrote in message news:i8lk0n$g3...@speranza.aioe.org...

My first try to write it in Python was something like this:

v = []
for i in range(20):
   v[i] = 0

Unfortunately, this doesn't work, as I get an index out of bounds when trying to
index the v list.

Python can't grow a list by assigning to out-of-bound elements (although, being the language it is, there is probably a way of achieving that by redefining how [] works...)

What is the Pythonic way of writing code like this? So far, I have found many

   v = [0 for i in range(20)]

   v = [0] * 20

   v = []
   for i in range(20): v.append(0)

What should I prefer? Any other alternative?

v=[0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0]

will also work. But none of these appeal too much. I would probably do:

def newlist(length,init=0):
       return [init]*length
...
v=newlist(1000)

(with the proviso that someone mentioned when the init value is complex: you might not get unique copies of each).

If possible, I would like to simply declare the list and fill it latter in my program, as lazily as possible (this happens notoriously when one is using a
technique of programming called dynamic programming where initializing all
positions of a table may take too much time in comparison to the filling of the
array).

A sparse array? Even if an array could be constructed by assigning to arbitrary elements, the gaps created would still need filling in with None or Unassigned.

2 - If I declare a class with some member variables, is is strictly necessary

This is where I bail out...

--
Bartc
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to