Search code examples
pythonlist

Create an empty list with certain size in Python


How do I create an empty list that can hold 10 elements?

After that, I want to assign values in that list. For example:

xs = list()
for i in range(0, 9):
   xs[i] = i

However, that gives IndexError: list assignment index out of range. Why?


Solution

  • You cannot assign to a list like xs[i] = value, unless the list already is initialized with at least i+1 elements (because the first index is 0). Instead, use xs.append(value) to add elements to the end of the list. (Though you could use the assignment notation if you were using a dictionary instead of a list.)

    Creating an empty list:

    >>> xs = [None] * 10
    >>> xs
    [None, None, None, None, None, None, None, None, None, None]
    

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

    >>> xs[1] = 5
    >>> xs
    [None, 5, None, None, None, None, None, None, None, None]
    

    Keep in mind that something like xs[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.
    >>> xs = range(10)
    >>> xs
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    Using a function to create a list:

    >>> def display():
    ...     xs = []
    ...     for i in range(9): # This is just to tell you how to create a list.
    ...         xs.append(i)
    ...     return xs
    ... 
    >>> 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]