In Python, the append()
and extend()
methods are used to add elements to a list, but they behave differently based on the type of argument provided:
1. list.append(item)
- Purpose: Adds a single element to the end of the list.
- Behavior:
- Treats the argument as a single object and inserts it into the list.
- If the argument is iterable (e.g., a list, tuple, or string), it adds the entire object as one element.
- Example:
a = [1, 2, 3]
a.append([4, 5]) # Adds the list [4, 5] as a single element
print(a) # Output: [1, 2, 3, [4, 5]]
2. list.extend(iterable)
- Purpose: Adds all elements of an iterable (e.g., list, tuple, string) to the end of the list.
- Behavior:
- Iterates over the argument and appends each element individually.
- Fails if the argument is not iterable (e.g., an integer or
None
). - Example:
a = [1, 2, 3]
a.extend([4, 5]) # Adds 4 and 5 as separate elements
print(a) # Output: [1, 2, 3, 4, 5]
Key Differences
Aspect | append() | extend() |
---|---|---|
Argument Type | Any single object (e.g., int , str , list ). | Requires an iterable (e.g., list , tuple ). |
Result | Adds the object as one element. | Adds each item of the iterable. |
Use Case | Insert a single item (even if it’s a list). | Merge elements of an iterable into the list. |
Performance | O(1) time complexity. | O(k) time complexity (k = length of iterable). |
Error Cases | None. Accepts any object. | Fails if the argument is not iterable (e.g., extend(5) ). |
Examples to Clarify
Case 1: Adding a String
a = [1, 2]
a.append("hello") # Adds the string as a single element: [1, 2, "hello"]
a.extend("hello") # Adds each character: [1, 2, 'h', 'e', 'l', 'l', 'o']
Case 2: Adding a List
a = [1, 2]
a.append([3, 4]) # Result: [1, 2, [3, 4]]
a.extend([3, 4]) # Result: [1, 2, 3, 4]
Case 3: Non-Iterable Argument
a = [1, 2]
a.append(3) # Works: [1, 2, 3]
a.extend(3) # TypeError: 'int' is not iterable
When to Use Which?
- Use
append()
to: - Add a single item (even if the item is a list).
- Preserve nested structures (e.g.,
[[4, 5]]
instead of[4, 5]
). - Use
extend()
to: - Merge elements of an iterable into the list.
- Avoid nested lists when combining multiple elements.
Equivalent Operations
append()
can be mimicked with:
a += [item] # Same as a.append(item)
extend()
can be mimicked with:
a += iterable # Same as a.extend(iterable)
Performance Note
For large iterables, extend()
is more efficient than repeatedly calling append()
in a loop.
Example:
# Efficient
a.extend(range(1000))
# Inefficient
for i in range(1000):
a.append(i)
Choose append()
for single elements and extend()
for merging iterables!