Different Ways to Concatenate Lists in Python

Introduction
Lists are one of the most commonly used data structures in Python. They allow you to store multiple elements in an ordered manner and support dynamic resizing. However, Python also has arrays (from the array
module or NumPy), which are optimized for numerical operations.
Lists vs. Arrays in Python
Feature | Python Lists | Arrays (array module / NumPy) |
---|---|---|
Data Type | Can store multiple data types | Must have uniform data types |
Performance | Slower due to generalization | Faster for numerical computations |
Memory Efficiency | Less efficient | More memory-efficient |
Built-in Support | Comes with Python by default | Requires importing array or NumPy |
While lists are highly flexible, arrays are more efficient when working with large numerical datasets. For general-purpose programming, lists are the go-to choice. In this blog, we will focus on different ways to concatenate lists in Python and when to use each method efficiently.
Methods to Concatenate Lists
1. Using +
Operator
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = list1 + list2
print(result) # Output: [1, 2, 3, 4, 5, 6]
When to Use This Method to Concatenate Lists:
- When you have a small number of lists.
- If you need a new list instead of modifying existing ones.
When Not to Use:
- If you are concatenating inside a loop, as it creates unnecessary intermediate lists.
2. Using extend()
Method
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1) # Output: [1, 2, 3, 4, 5, 6]
When to Use This Method to Concatenate Lists:
- When you want to modify an existing list instead of creating a new one.
- More memory-efficient than
+
as it avoids creating extra lists.
When Not to Use:
- If you need to preserve the original lists without modification.
3. Concatenate Lists Using append()
with a Loop
list1 = [1, 2, 3]
list2 = [4, 5, 6]
for item in list2:
list1.append(item)
print(list1) # Output: [1, 2, 3, 4, 5, 6]
When to Use This Method to Concatenate Lists:
- When you need to iterate over and process elements before adding them.
- When working with generators or lazy evaluation.
When Not to Use:
- When performance is a concern, as this is slower than
extend()
.
4. Concatenate Lists Using itertools.chain()
(Efficient for Large Lists)
import itertools
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = list(itertools.chain(list1, list2))
print(result) # Output: [1, 2, 3, 4, 5, 6]
When to Use This Method to Concatenate Lists:
- When dealing with very large lists, as
itertools.chain()
is memory-efficient. - When you want to work with iterators instead of fully materializing lists.
When Not to Use:
- If you need an immediate in-place modification of an existing list.
5. Using List Comprehension
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = [item for sublist in (list1, list2) for item in sublist]
print(result) # Output: [1, 2, 3, 4, 5, 6]
When to Use this method to Concatenate Lists:
- When concatenation needs to be combined with element transformations.
- If you want a one-liner with high readability.
When Not to Use:
- When working with deeply nested lists, as it can become hard to read.
6. Concatenate Lists Using sum()
with Lists (Not Recommended for Large Lists)
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = sum([list1, list2], [])
print(result) # Output: [1, 2, 3, 4, 5, 6]
When to Use this method to Concatenate Lists:
- Only for small lists where performance is not a concern.
- When working with multiple lists in a concise way.
When Not to Use:
- This method is slow and inefficient for large lists due to repeated list copying.
7. Using numpy.concatenate()
(For Numerical Data)
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result = np.concatenate((arr1, arr2))
print(result) # Output: [1 2 3 4 5 6]
When to Use This Method to Concatenate Lists:
- When working with numerical data for high performance.
- If you are using NumPy arrays instead of lists.
When Not to Use:
- If you are working with non-numeric data.
- If you are not already using NumPy in your project.
Performance Comparison
Let’s analyze the performance of these methods using timeit
:
import timeit
list1 = list(range(10000))
list2 = list(range(10000, 20000))
print(timeit.timeit(lambda: list1 + list2, number=1000)) # Using +
print(timeit.timeit(lambda: list1.extend(list2), number=1000)) # Using extend
print(timeit.timeit(lambda: list(itertools.chain(list1, list2)), number=1000)) # Using itertools
From empirical tests:
+
is fast for small lists but inefficient for large lists.extend()
is the best choice for modifying an existing list.itertools.chain()
is the most memory-efficient for large datasets.
Conclusion
Choosing the right method for concatenating lists in Python depends on your specific needs:
- For small lists → Use
+
for simplicity. - For modifying existing lists → Use
extend()
. - For large lists → Use
itertools.chain()
. - For numerical data → Use
numpy.concatenate()
. - Avoid
sum([])
for performance reasons.
Each method has its pros and cons, so selecting the best one depends on efficiency and readability. Happy coding!