DEV Community

Cover image for #Day15 - The Fastest way to combine Lists in Python
Rahul Banerjee
Rahul Banerjee

Posted on • Originally published at realpythonproject.com

#Day15 - The Fastest way to combine Lists in Python

Today we will use the timeit module to try to find out the fastest way to combine a couple of Lists in Python.

We will be considering the following different ways to combine lists

  • Using the + operator
  • Using a for loop
  • Using append()
  • Using extend()
  • Unpacking with * operator
  • Using itertools.chain()

How are we going to measure the performance?

image.png

lst1 and lst2 are two lists with 1000000 random integers, we have created a function that will combine the lists in the different approaches mentioned above. This function will be called 10 times and we will measure the average time taken for each approach.

Using the + operator

def func(lst1 , lst2):
    lst3 = lst1 + lst2
Enter fullscreen mode Exit fullscreen mode

Time taken

On average it took 0.01051248973235488 seconds
Enter fullscreen mode Exit fullscreen mode

Output

I have used smaller lists to show the output

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
Output: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]
Enter fullscreen mode Exit fullscreen mode

Using a for loop

def func(lst1 , lst2):
    lst3 = []

    for element in lst1:
        lst3.append(element)

    for element in lst2:
        lst3.append(element) 
Enter fullscreen mode Exit fullscreen mode

Time taken

On average it took 0.09956733733415604 seconds
Enter fullscreen mode Exit fullscreen mode

Output

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
Output: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]
Enter fullscreen mode Exit fullscreen mode

Using append()

Note: this is in-place, i.e unlike our previous approaches, we do not create a new list. Instead lst1 is updated

def func(lst1 , lst2):
    lst1.append(lst2) 
Enter fullscreen mode Exit fullscreen mode

Time taken

On average it took 6.137415766716003e-07 seconds
Enter fullscreen mode Exit fullscreen mode

Output

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
After append()
Input 1: [10, 3, 24, 56, 7, [100, 100, 200, 40, 60]]
Input 2: [100, 100, 200, 40, 60]
Enter fullscreen mode Exit fullscreen mode

As you can see, lst1 get's updated. Also notice unlike the previous approaches, we are not directly combining the elements of both the list. lst1 contains lst2 as an element

Using extend()

This is similar to append. It is an in-place method. The only difference being instead of adding the entire lst2 to lst1, it adds the elements of lst2 to lst1

def func(lst1 , lst2):
    lst1.extend(lst2) 
Enter fullscreen mode Exit fullscreen mode

Time taken

On average it took 0.01660564970225096 seconds
Enter fullscreen mode Exit fullscreen mode

Output

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
After extend()
Input 1: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]
Input 2: [100, 100, 200, 40, 60]
Enter fullscreen mode Exit fullscreen mode

Notice the difference in Input 1

After append()
Input 1: [10, 3, 24, 56, 7, [100, 100, 200, 40, 60]]
After extend()
Input 1: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]
Enter fullscreen mode Exit fullscreen mode

Unpacking with * operator

def func(lst1 , lst2):
    lst = [*lst1,*lst2]  
Enter fullscreen mode Exit fullscreen mode

Time taken

On average it took 0.031204084493219854 seconds
Enter fullscreen mode Exit fullscreen mode

Output

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
Output: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]
Enter fullscreen mode Exit fullscreen mode

Using itertools.chain()

def func(lst1 , lst2):
    lst3 = itertools.chain(lst1,lst2)
    lst3 = list(lst3)
Enter fullscreen mode Exit fullscreen mode

The chain() function returns an iterator object. We can convert it to a list by using the list() function.

Time taken

On average it took 0.028354898421093823 seconds
Enter fullscreen mode Exit fullscreen mode

Output

Input 1: [10, 3, 24, 56, 7]
Input 2: [100, 100, 200, 40, 60]
Output: [10, 3, 24, 56, 7, 100, 100, 200, 40, 60]
Enter fullscreen mode Exit fullscreen mode

Comparison of the approaches

image.png

append() is the fastest but it doesn't combine the elements of both the lists. The + operator seems to be the ideal option. However, this has been done on a comparatively smaller dataset and results may vary when you try it on your own.

Knowing different approaches to combine list is pretty useful and can you help you optimize your code

Oldest comments (0)