Trong lập trình, dữ liệu mà chúng ta xử lý không phải lúc nào cũng cố định. Nhiều tình huống yêu cầu mình phải thêm mới các phần tử vào một mảng (array) để lưu trữ thông tin. Đây là một thao tác cực kỳ cơ bản nhưng lại có vai trò quan trọng, vì nó xuất hiện thường xuyên trong các chương trình Python.
Trong bài viết này, hãy cùng mình tìm hiểu chi tiết các cách thêm phần tử vào array trong Python: từ việc dùng append()
, insert()
, extend()
, đến các kỹ thuật linh hoạt hơn như phép cộng, unpacking hay thậm chí là module array
. Mình cũng sẽ phân tích hiệu năng, đưa ra ví dụ minh họa và một vài bài tập thực hành để hệ thống lại kiến thức.
1. Các cách thêm phần tử vào Array
Python cung cấp nhiều phương pháp khác nhau để thêm phần tử. Tùy từng tình huống mà mình có thể chọn cách phù hợp:
append()
: thêm 1 phần tử vào cuối array.insert()
: thêm 1 phần tử vào vị trí cụ thể.extend()
: thêm nhiều phần tử từ một mảng khác.- Phép cộng
+
hoặc unpacking: tạo một mảng mới với phần tử bổ sung. - Module
array
: dùng khi cần hiệu suất tốt với dữ liệu số.
Ở các phần sau, mình sẽ đi chi tiết từng phương pháp.
2. Thêm phần tử với append()
Phương thức append()
dùng để thêm một phần tử vào cuối array. Đây là cách phổ biến nhất khi xử lý dữ liệu động.
Ví dụ:
# Example: append element to the end
numbers = [1, 2, 3]
numbers.append(4) # Add new element at the end
print(numbers) # [1, 2, 3, 4]
Trong ví dụ trên, mình có một list numbers
và sử dụng append(4)
để thêm số 4
vào cuối.
- Ưu điểm
- Hiệu năng cao khi thêm vào cuối mảng.
- Cú pháp ngắn gọn, dễ nhớ.
- Nhược điểm
- Không kiểm soát được vị trí chèn, vì
append()
luôn thêm vào cuối.
- Không kiểm soát được vị trí chèn, vì
3. Thêm phần tử với insert()
Nếu muốn chèn phần tử tại vị trí bất kỳ, ta dùng insert(index, value)
.
Ví dụ:
# Example: insert element at specific position
fruits = ["apple", "banana", "cherry"]
fruits.insert(1, "orange") # Insert at index 1
print(fruits) # ['apple', 'orange', 'banana', 'cherry']
Ở đây, "orange"
được thêm vào vị trí số 1, tức là ngay sau "apple"
.
- Ưu điểm
- Kiểm soát chính xác vị trí thêm phần tử.
- Nhược điểm
- Kém hiệu quả với list dài, vì Python phải dịch chuyển các phần tử sau vị trí chèn (độ phức tạp O(n)).
4. Thêm nhiều phần tử với extend()
Nếu muốn thêm nhiều phần tử cùng lúc, ta dùng extend()
.
Ví dụ:
# Example: extend list with multiple elements
numbers = [1, 2, 3]
numbers.extend([4, 5, 6]) # Add multiple elements
print(numbers) # [1, 2, 3, 4, 5, 6]
So sánh với append()
:
append([4, 5, 6])
→ sẽ thêm cả list như một phần tử duy nhất →[1, 2, 3, [4, 5, 6]]
.extend([4, 5, 6])
→ sẽ thêm từng phần tử của list.
5. Thêm phần tử bằng phép cộng và unpacking
Ngoài các phương thức có sẵn, mình còn có thể tạo một list mới với phần tử bổ sung bằng toán tử +
hoặc unpacking *
.
Ví dụ:
# Example: add new element with +
numbers = [1, 2, 3]
new_numbers = numbers + [4]
print(new_numbers) # [1, 2, 3, 4]
# Example: add new element with unpacking
another = [*numbers, 5]
print(another) # [1, 2, 3, 5]
- Ưu điểm
- Cú pháp gọn gàng, dễ đọc.
- Không làm thay đổi list ban đầu.
- Nhược đi
- Tạo ra list mới → tốn thêm bộ nhớ.
6. Thêm phần tử với array
module
Python có module array
chuyên dùng cho dữ liệu số (int, float, …). Nó tiết kiệm bộ nhớ hơn so với list.
Ví dụ:
import array
# Example: using array module
numbers = array.array("i", [1, 2, 3])
numbers.append(4) # Add at the end
numbers.insert(1, 10) # Insert at index 1
print(numbers) # array('i', [1, 10, 2, 3, 4])
Ở đây "i"
nghĩa là kiểu dữ liệu số nguyên (integer). Ta vẫn có thể dùng append()
và insert()
tương tự như list.
7. Một số lưu ý về hiệu suất
Việc thêm phần tử có ảnh hưởng đến hiệu năng:
- Thêm vào cuối list (
append
) thường nhanh nhất. - Thêm vào đầu hoặc giữa list (
insert
) kém hiệu quả hơn vì phải dịch chuyển nhiều phần tử. - Nếu cần thêm/xóa ở đầu mảng thường xuyên, hãy cân nhắc dùng
collections.deque
, vốn được tối ưu cho thao tác này.
Ví dụ với deque
:
from collections import deque
# Example: using deque for efficient insert at the beginning
dq = deque([2, 3, 4])
dq.appendleft(1) # Add element at the beginning
print(dq) # deque([1, 2, 3, 4])
8. Bài tập thực hành
Để hệ thống lại kiến thức, bạn có thể thử làm một vài bài tập nhỏ:
Bài tập 1: Viết hàm thêm phần tử vào cuối mảng mà không dùng append()
.
# Solution: use concatenation
def add_to_end(arr, value):
return arr + [value]
print(add_to_end([1, 2, 3], 4)) # [1, 2, 3, 4]
Bài tập 2: Thêm một phần tử vào vị trí bất kỳ trong list.
# Solution: slicing
def insert_at(arr, index, value):
return arr[:index] + [value] + arr[index:]
print(insert_at([10, 20, 30], 1, 15)) # [10, 15, 20, 30]
Bài tập 3: Thêm nhiều phần tử từ một list khác.
# Solution: extend
def extend_list(arr, values):
arr.extend(values)
return arr
print(extend_list([1, 2], [3, 4, 5])) # [1, 2, 3, 4, 5]
9. Kết luận
Trong Python, việc thêm phần tử vào array có nhiều cách: append()
, insert()
, extend()
, phép cộng, unpacking hay sử dụng module array
. Mỗi cách có ưu và nhược điểm riêng, phù hợp với từng tình huống cụ thể:
- Dùng
append()
khi chỉ cần thêm vào cuối. - Dùng
insert()
khi cần kiểm soát vị trí. - Dùng
extend()
khi thêm nhiều phần tử. - Dùng phép cộng hoặc unpacking khi muốn tạo mảng mới.
- Dùng
deque
hoặcarray
khi quan tâm đến hiệu suất.
Việc hiểu rõ cơ chế của từng phương pháp sẽ giúp mình viết code Python tối ưu và dễ bảo trì hơn.
10. Tài liệu tham khảo
- Python Software Foundation. Built-in Types — list. Python 3 Documentation. https://docs.python.org/3/library/stdtypes.html#list
- Python Software Foundation. array — Efficient arrays of numeric values. Python 3 Documentation. https://docs.python.org/3/library/array.html
- Luciano Ramalho. Fluent Python, 2nd Edition. O’Reilly Media, 2021.