Cách sử dụng danh sách Python hiệu quả
By manhnv, at: 10:37 Ngày 24 tháng 2 năm 2025
Thời gian đọc ước tính: __READING_TIME__ minutes


Sử dụng danh sách Python một cách hiệu quả liên quan đến việc hiểu được điểm mạnh và điểm yếu của chúng, cũng như áp dụng các thực tiễn tốt nhất.
Dưới đây là một số lời khuyên để giúp bạn sử dụng danh sách Python hiệu quả hơn:
1. Hiểu các phép toán trên danh sách
- Thêm phần tử: Sử dụng
append()
để thêm phần tử vào cuối danh sách. Phép toán này hiệu quả (độ phức tạp thời gian trung bình là O(1)).
- Chèn phần tử: Chèn phần tử vào đầu hoặc giữa danh sách có thể không hiệu quả (độ phức tạp thời gian là O(n)) vì nó yêu cầu dịch chuyển các phần tử.
- Truy cập phần tử: Truy cập phần tử bằng chỉ mục rất hiệu quả (độ phức tạp thời gian là O(1)).
- Cắt lát: Cắt lát tạo ra một danh sách mới, điều này có thể không hiệu quả đối với các danh sách lớn.
2. Sử dụng List Comprehensions
List comprehensions là một cách ngắn gọn và hiệu quả để tạo danh sách. Chúng thường nhanh hơn so với việc sử dụng vòng lặp.
squares = [x**2 for x in range(10)]
3. Tránh sao chép không cần thiết
Việc tạo bản sao của danh sách có thể tốn nhiều bộ nhớ. Sử dụng cắt lát hoặc mô-đun copy
một cách thận trọng.
copy_of_list = original_list[:]
# hoặc
import copy
copy_of_list = copy.deepcopy(original_list)
4. Sử dụng deque
cho việc chèn/xóa thường xuyên
Nếu bạn cần thường xuyên chèn hoặc xóa phần tử từ cả hai đầu của danh sách, hãy xem xét sử dụng collections.deque
, được tối ưu hóa cho các hoạt động này.
from collections import deque
d = deque() d.append(1) d.appendleft(2)
5. Phân bổ trước kích thước danh sách
Nếu bạn biết kích thước của danh sách trước, việc phân bổ trước có thể hiệu quả hơn.
my_list = ["a"] * 1000
6. Sử dụng extend()
để thêm nhiều phần tử
Thay vì sử dụng nhiều lệnh gọi append()
, hãy sử dụng extend()
để thêm nhiều phần tử cùng một lúc.
my_list.extend([1, 2, 3])
7. Tránh sử dụng danh sách cho dữ liệu số lớn
Đối với dữ liệu số lớn, hãy xem xét sử dụng mảng NumPy, tiết kiệm bộ nhớ hơn và cung cấp các phép toán nhanh hơn.
import numpy as np array = np.array([1, 2, 3, 4, 5])
8. Sử dụng join()
để nối chuỗi
Khi nối chuỗi, hãy sử dụng join()
thay vì toán tử +
để có hiệu suất tốt hơn.
result = ''.join(list_of_strings)
9. Sử dụng các hàm tích hợp sẵn
Tận dụng các hàm tích hợp sẵn như sum()
, min()
, max()
và sorted()
cho các hoạt động phổ biến.
total = sum(my_list) sorted_list = sorted(my_list)
10. Phân tích mã của bạn
Sử dụng các công cụ phân tích như cProfile
để xác định các điểm nghẽn trong mã của bạn và tối ưu hóa các hoạt động trên danh sách cho phù hợp.
import cProfile
cProfile.run('your_function()')
Ví dụ về việc sử dụng danh sách hiệu quả
# Tạo hiệu quả một danh sách các bình phương
squares = [x**2 for x in range(1000)]
# Thêm nhiều phần tử hiệu quả
squares.extend([1000**2, 1001**2, 1002**2])
# Truy cập phần tử hiệu quả
for i in range(10):
print(squares[i])
# Nối chuỗi hiệu quả
strings = ['a', 'b', 'c']
result = ''.join(strings)
Bằng cách tuân theo các thực tiễn tốt nhất này, bạn có thể sử dụng danh sách Python hiệu quả hơn và cải thiện hiệu suất của các chương trình của bạn.
Bài tập thử thách
-
Tìm danh sách con Palindrome dài nhất: Viết một chương trình để tìm danh sách con Palindrome dài nhất trong một danh sách đã cho.
- Ví dụ: Đối với danh sách
[2, 1, 3, 1, 2, 5, 1, 3, 1]
, danh sách con Palindrome dài nhất là[1, 3, 1, 2, 1, 3, 1]
.
- Ví dụ: Đối với danh sách
-
Bài toán tổng tập con: Viết một chương trình để xác định xem có một tập con của một danh sách đã cho có tổng bằng một giá trị đã chỉ định hay không.
- Ví dụ: Đối với danh sách
[3, 34, 4, 12, 5, 2]
và tổng9
, các tập con[4, 5]
và[4, 2, 3]
đều có tổng bằng 9.
- Ví dụ: Đối với danh sách
-
Tìm phần tử nhỏ thứ K: Viết một chương trình để tìm phần tử nhỏ thứ k trong một danh sách chưa được sắp xếp.
- Ví dụ: Đối với danh sách
[7, 10, 4, 3, 20, 15]
vàk = 3
, phần tử nhỏ thứ 3 là7
.
- Ví dụ: Đối với danh sách
-
Cửa sổ trượt cực đại: Viết một chương trình để tìm giá trị cực đại trong mỗi cửa sổ trượt có kích thước
k
trong một danh sách đã cho.- Ví dụ: Đối với danh sách
[1, 3, -1, -3, 5, 3, 6, 7]
vàk = 3
, các giá trị cực đại là[3, 3, 5, 5, 6, 7]
.
- Ví dụ: Đối với danh sách
-
Tìm tất cả các Anagram trong một danh sách: Viết một chương trình để tìm tất cả các anagram trong một danh sách các chuỗi.
- Ví dụ: Đối với danh sách
["listen", "silent", "enlist", "google", "gooegl"]
, các anagram là["listen", "silent", "enlist"]
và["google", "gooegl"]
.
- Ví dụ: Đối với danh sách
-
Trộn K danh sách đã sắp xếp: Viết một chương trình để trộn
k
danh sách đã sắp xếp thành một danh sách đã sắp xếp.- Ví dụ: Đối với các danh sách
[[1, 4, 5], [1, 3, 4], [2, 6]]
, danh sách đã trộn là[1, 1, 2, 3, 4, 4, 5, 6]
.
- Ví dụ: Đối với các danh sách
-
Tìm số trung vị của hai danh sách đã sắp xếp: Viết một chương trình để tìm số trung vị của hai danh sách đã sắp xếp.
- Ví dụ: Đối với các danh sách
[1, 3]
và[2]
, số trung vị là2.0
. Đối với các danh sách[1, 2]
và[3, 4]
, số trung vị là2.5
.
- Ví dụ: Đối với các danh sách
-
Tìm mảng con chưa được sắp xếp ngắn nhất: Viết một chương trình để tìm mảng con ngắn nhất cần được sắp xếp để làm cho toàn bộ danh sách được sắp xếp.
- Ví dụ: Đối với danh sách
[2, 6, 4, 8, 10, 9, 15]
, mảng con chưa được sắp xếp ngắn nhất là[6, 4, 8, 10, 9]
.
- Ví dụ: Đối với danh sách
-
Tìm phần tử đa số II: Viết một chương trình để tìm tất cả các phần tử xuất hiện nhiều hơn
n/3
lần trong một danh sách.- Ví dụ: Đối với danh sách
[3, 2, 3]
, các phần tử đa số là[3]
. Đối với danh sách[1, 1, 1, 3, 3, 2, 2, 2]
, các phần tử đa số là[1, 2]
.
- Ví dụ: Đối với danh sách
-
Tìm số bước nhảy tối thiểu: Viết một chương trình để tìm số bước nhảy tối thiểu cần thiết để đến cuối danh sách, trong đó mỗi phần tử đại diện cho số bước tối đa có thể nhảy.
- Ví dụ: Đối với danh sách
[2, 3, 1, 1, 4]
, số bước nhảy tối thiểu là2
(nhảy từ chỉ mục 0 đến 1, sau đó từ chỉ mục 1 đến 4).
- Ví dụ: Đối với danh sách