List Comprehension trong Python
Category: Python
List comprehension là một cách tạo danh sách bằng cú pháp ngắn gọn. Nó cho phép chúng ta tạo danh sách mới bằng cách áp dụng một biểu thức cho mỗi mục trong một đối tượng lặp hiện có (chẳng hạn như danh sách hoặc phạm vi ). Điều này giúp chúng ta viết mã sạch hơn, dễ đọc hơn so với các kỹ thuật lặp truyền thống.
Ví dụ , nếu chúng ta có một danh sách các số nguyên và muốn tạo một danh sách mới chứa bình phương của mỗi phần tử, chúng ta có thể dễ dàng thực hiện điều này bằng cách sử dụng List comprehension.
a = [2,3,4,5]
res = [val ** 2 for val in a]
print(res)
Đầu ra:
[4, 9, 16, 25]
Cú pháp của List Comprehension
[ biểu thức cho mục trong điều kiện if có thể lặp lại ]
biểu thức: Sự biến đổi hoặc giá trị sẽ được đưa vào danh sách mới.
mục: Phần tử hiện tại được lấy từ phần tử lặp lại.
có thể lặp lại: Một chuỗi hoặc bộ sưu tập (ví dụ: danh sách, bộ, tập hợp).
điều kiện if (tùy chọn): Điều kiện lọc quyết định xem mục hiện tại có nên được đưa vào hay không.
Cú pháp này cho phép chúng ta kết hợp lặp lại, sửa đổi và lọc có điều kiện trong cùng một dòng.
Vòng lặp For so với List Comprehension
Sự khác biệt chính là vòng lặp for yêu cầu nhiều dòng để tạo danh sách mới bằng cách lặp qua các mục và thêm thủ công từng mục. Trong khi đó, List comprehension thực hiện cùng một nhiệm vụ trong một dòng, điều này làm cho mã đơn giản hơn và dễ đọc hơn.
Ví dụ: Hãy lấy một ví dụ, trong đó chúng ta muốn nhân đôi mỗi số trong danh sách đã cho thành một danh sách mới
Sử dụng vòng lặp for:
a = [1, 2, 3, 4, 5]
# Tạo một danh sách rỗng 'res' để lưu trữ kết quả
res = []
# Lặp lại qua từng phần tử trong danh sách 'a'
for val in a:
# Nhân mỗi phần tử với 2 và thêm nó vào 'res'
res.append(val * 2)
print(res)
Đầu ra:
[2, 4, 6, 8, 10]
Giải thích: Tạo một danh sách rỗng ' res ' để lưu trữ kết quả và lặp lại từng phần tử trong danh sách ' a ' và đối với mỗi mục trong danh sách ' a ', nhân nó với 2 và thêm nó vào ' res ' bằng phương thức append() .
Sử dụng List Comprehension:
a = [1, 2, 3, 4, 5]
res = [val * 2 for val in a]
print(res)
Đầu ra:
[2, 4, 6, 8, 10]
Giải thích: Trong List comprehension ở trên, phần lặp là danh sách ' a' và biểu thức là val * 2, nhân mỗi giá trị trong danh sách với 2.
Các câu lệnh điều kiện trong List Comprehension
List understanding có thể bao gồm các câu lệnh có điều kiện để lọc hoặc sửa đổi các mục dựa trên các tiêu chí cụ thể. Các điều kiện này giúp chúng ta tạo danh sách tùy chỉnh nhanh chóng và làm cho mã sạch hơn và hiệu quả hơn.
Ví dụ: Giả sử chúng ta muốn lọc tất cả danh sách chẵn từ danh sách đã cho.
a = [1, 2, 3, 4, 5]
res = [val for val in a if val % 2 == 0]
print(res)
Đầu ra:
[2, 4]
Ví dụ về List Comprehension
Tạo danh sách từ một phạm vi
Một ví dụ đơn giản là tạo danh sách các số từ 0 đến 9.
# tạo danh sách các số từ 0 đến 9
a = [i for i in range(10)]
print(a)
Đầu ra
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Sử dụng vòng lặp lồng nhau
List comprehension cũng có thể được sử dụng với các vòng lặp lồng nhau. Ở đây, chúng ta tạo một danh sách các cặp tọa độ cho một lưới 3x3 đơn giản.
# Tạo danh sách các bộ đại diện cho tất cả các tổ hợp của (x, y)
# trong đó cả x và y đều nằm trong khoảng từ 0 đến 2.
coordinates = [(x, y) for x in range(3) for y in range(3)]
print(coordinates)
Đầu ra
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
Làm phẳng một danh sách các danh sách
Giả sử chúng ta có một danh sách các danh sách và muốn chuyển đổi nó thành một danh sách duy nhất.
mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
res = [val for row in mat for val in row]
print(res)
Đầu ra
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Giải thích: Dòng [val for row in mat for val in row] sử dụng sự List comprehension lồng nhau để lặp qua từng row in mat . Đối với mỗi row, nó lặp qua từng val trong row đó và thu thập tất cả các giá trị vào một danh sách duy nhất.
Published on Jun 19, 2025