Today, we will see how to create a list of lists in Python. There are multiple ways to do that. Let’s get started and see some of the methods.
For Loop and the append() method
The first method is quite simple and straightforward. Initially, we create an empty list lst1, then we run a loop and append lists to lst1.
If we want to insert n sublists, then we will have to run a loop n times using the range() function. Let’s understand this concept using an example.
lst1 = [] for i in range(0, 5): lst1.append([]) print(lst1)
Output
[[], [], [], [], []]
Here, the loop runs five times. In each iteration, we append an empty list to lst1, which allows us to create a list of lists, as you can see in the output.
List Comprehension
Another method is to use list comprehension that provides us an easier and a concise way. Let’s see an example.
lst = [[] for i in range(0, 5)] print(lst)
Output
[[], [], [], [], []]
A list comprehension always returns a list whose contents depend upon the expressions in the for loop and if condition (if any).
In the above example, we add a sublist every time the loop runs, and thus, the result contains a list of lists.
NumPy Library
Another method to make a list of lists is to NumPy. It is a powerful library for scientific computations.
It provides several methods and tools to create and work with multidimensional arrays efficiently.
We can make a list of lists using the empty() method of the NumPy library. We need to pass a tuple containing the row size and the column size.
It also takes a data type. By default, it will create an array of type numpy.float64.
Moreover, it returns a ndarray (N-Dimensional array) of fixed size and type. To convert it to a list, we will use the tolist() method.
Consider the following code:
import numpy as np np_array = np.empty((5, 0)) lst = np_array.tolist() print(lst) print(f"Type of np_array: {type(np_array)} and the type of lst: {type(lst)}")
Output
[[], [], [], [], []] Type of np_array: <class 'numpy.ndarray'> and the type of lst: <class 'list'>
We can do the same using the numpy.ndarray() method. Let’s see.
import numpy as np np_array = np.ndarray((5, 0)) lst = np_array.tolist() print(lst)
[[], [], [], [], []]
The map() function
We can also create a list of lists using Python’s built-in map() function. map() takes two arguments: a function and an iterable.
It calls the given function for each item of an iterable and returns an iterator. Consider the following example.
n=5 lst = [None]*n lst = list(map(lambda x: [], lst)) print(lst)
Output
[[], [], [], [], []]
First, we create a list of n elements containing None. Then, we pass this list to map().
Each item of the outer list gets mapped to an empty list using the anonymous function. Finally, we convert the returned iterator (map object) to a list to get a list of lists.
What not to do
We can create a one-dimensional list in the following way.
lst = [None]*n
Here, lst will be of size n, and each item will have the value None. In other words, any value we put inside the square brackets get repeated n times.
So if we put [] inside it, then we will get a list of lists, no? Well, you do, but every item refers to the same object (the first one). Simply put, we get n same sublists. let’s see.
n=5 lst = [[]]*n print(lst) #append an item to the last list lst[n-1].append(3) print(lst)
Output
[[], [], [], [], []] [[3], [3], [3], [3], [3]]
Consider another code.
n=5 lst = [] new_list = [lst for i in range(0, n)] #append an item to the last list new_list[n-1].append(3) print(lst) print(new_list)
This above code also creates five references of the variable lst. So, new_list[0], new_list[1], … new_list[n-1] refer to the same address pointed by lst.
Output
[3] [[3], [3], [3], [3], [3]]
Use lst[:] instead of lst or copy the list explicitly using copy() from the copy module.
Hey guys! It’s me, Marcel, aka Maschi. On MaschiTuts, it’s all about tutorials! No matter the topic of the article, the goal always remains the same: Providing you guys with the most in-depth and helpful tutorials!