Create an empty list in Python with certain size
You cannot assign to a list like
lst[i] = something, unless the list already is initialized with at least
i+1 elements. You need to use append to add elements to the end of the list.
(You could use the assignment notation if you were using a dictionary).
Creating an empty list:
None] * 10l[None, None, None, None, None, None, None, None, None, None]l = [
Assigning a value to an existing element of the above list:
1] = 5l[None, 5, None, None, None, None, None, None, None, None]l[
Keep in mind that something like
l = 5 would still fail, as our list has only 10 elements.
range(x) creates a list from [0, 1, 2, ... x-1]
# 2.X only. Use list(range(10)) in 3.X.l = range(10) l[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Using a function to create a list:
def display(): s1 =  for i in range(9): # This is just to tell you how to create a list. s1.append(i) return s1print display()[0, 1, 2, 3, 4, 5, 6, 7, 8]
List comprehension (Using the squares because for range you don't need to do all this, you can just return
def display(): return [x**2 for x in range(9)]print display()[0, 1, 4, 9, 16, 25, 36, 49, 64]
Try this instead:
lst = [None] * 10
The above will create a list of size 10, where each position is initialized to
None. After that, you can add elements to it:
lst = [None] * 10for i in range(10): lst[i] = i
Admittedly, that's not the Pythonic way to do things. Better do this:
lst = for i in range(10): lst.append(i)
Or even simpler, in Python 2.x you can do this to initialize a list with values from 0 to 9:
lst = range(10)
And in Python 3.x:
lst = list(range(10))
varunl's currently accepted answer
>>> l = [None] * 10 >>> l [None, None, None, None, None, None, None, None, None, None]
Works well for non-reference types like numbers. Unfortunately if you want to create a list-of-lists you will run into referencing errors. Example in Python 2.7.6:
10a[, , , , , , , , , ] a.append(0) a[, , , , , , , , , ]a = []*
As you can see, each element is pointing to the same list object. To get around this, you can create a method that will initialize each position to a different object reference.
def init_list_of_objects(size): list_of_objects = list() for i in range(0,size): list_of_objects.append( list() ) #different object reference each time return list_of_objects a = init_list_of_objects(10) a[, , , , , , , , , ] a.append(0) a[, , , , , , , , , ]
There is likely a default, built-in python way of doing this (instead of writing a function), but I'm not sure what it is. Would be happy to be corrected!
[  for _ in range(10)]
for _ in range(2) ] for _ in range(5)] [[0.7528051908943816, 0.4325669600055032], [0.510983236521753, 0.7789949902294716], [0.09475179523690558, 0.30216475640534635], [0.3996890132468158, 0.6374322093017013], [0.3374204010027543, 0.4514925173253973]][ [random.random()