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


Cách sử dụng python LIST HIỆU QUẢ
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ư việc á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 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 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ử theo chỉ mục là hiệu quả (độ phức tạp thời gian 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 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 các bản sao của danh sách có thể rất tốn bộ nhớ. Hãy 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 các 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 thao tác 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()
cho việc 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 thao tác thông thường.
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 thao tác 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 danh sách các số bình phương một cách hiệu quả
squares = [x**2 for x in range(1000)]
# Thêm nhiều phần tử một cách hiệu quả
squares.extend([1000**2, 1001**2, 1002**2])
# Truy cập phần tử một cách hiệu quả
for i in range(10):
print(squares[i])
# Nối chuỗi một cách hiệu quả
strings = ['a', 'b', 'c']
result = ''.join(strings)
Bằng cách làm 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 trước.
- 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 trước 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ị lớn nhất trong mỗi cửa sổ trượt có kích thước
k
trong một danh sách cho trước.- Ví dụ: Đối với danh sách
[1, 3, -1, -3, 5, 3, 6, 7]
vàk = 3
, các giá trị lớn nhất là[3, 3, 5, 5, 6, 7]
.
- Ví dụ: Đối với danh sách
-
Tìm tất cả các từ đồng nghĩa trong một danh sách: Viết một chương trình để tìm tất cả các từ đồng nghĩa 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 từ đồng nghĩa 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 trung vị của hai danh sách đã sắp xếp: Viết một chương trình để tìm 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]
, trung vị là2.0
. Đối với các danh sách[1, 2]
và[3, 4]
, 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