Create an empty list in Python with certain size Create an empty list in Python with certain size python python

# 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. `lst.append(something)`.

(You could use the assignment notation if you were using a dictionary).

Creating an empty list:

``>>> l = [None] * 10>>> l[None, None, None, None, None, None, None, None, None, None]``

Assigning a value to an existing element of the above list:

``>>> l[1] = 5>>> l[None, 5, None, None, None, None, None, None, None, None]``

Keep in mind that something like `l[15] = 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 s1... >>> print 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 `range(0,9)` ):

``>>> def display():...     return [x**2 for x in range(9)]... >>> print display()[0, 1, 4, 9, 16, 25, 36, 49, 64]``

``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))``

`` >>> 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:

``>>> a = [[]]*10>>> a[[], [], [], [], [], [], [], [], [], []]>>> a[0].append(0)>>> a[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]>>> ``

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[0].append(0)>>> a[[0], [], [], [], [], [], [], [], [], []]>>> ``

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!

Edit: It's `[ [] for _ in range(10)]`

Example :

``>>> [ [random.random() 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]]``