Khóa học python

List Comprehension trong Python

0 phút đọc

List comprehension là một trong những tính năng mạnh mẽ và tiện lợi nhất của Python, cho phép bạn tạo ra các danh sách mới từ các danh sách hiện có hoặc từ các iterable khác một cách ngắn gọn và dễ đọc. Bài viết này sẽ cung cấp một cái nhìn chi tiết về list comprehension, bao gồm cú pháp, các ví dụ minh họa, và so sánh với các phương pháp truyền thống như vòng lặp for và hàm map(). Chúng ta cũng sẽ thảo luận về các ưu điểm và nhược điểm của list comprehension.

Cú pháp của List Comprehension

Cú pháp của list comprehension trong Python rất đơn giản và dễ hiểu. Nó bao gồm các dấu ngoặc vuông chứa một biểu thức, theo sau là một hoặc nhiều mệnh đề forif.

Cú pháp cơ bản

python Copy
new_list = [expression for item in iterable if condition]
  • expression: Biểu thức được thực thi cho mỗi phần tử trong iterable.
  • item: Biến đại diện cho mỗi phần tử trong iterable.
  • iterable: Một đối tượng có thể lặp lại (như danh sách, tuple, set, hoặc range).
  • condition: (Tùy chọn) Một điều kiện lọc các phần tử.

Ví dụ cơ bản

python Copy
# Tạo một danh sách các số từ 0 đến 9
numbers = [x for x in range(10)]
print(numbers)

Kết quả:

Copy
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Trong ví dụ trên, list comprehension tạo ra một danh sách các số từ 0 đến 9.

Các ví dụ về List Comprehension

Tạo danh sách các số bình phương

python Copy
# Tạo một danh sách các số bình phương từ 0 đến 9
squares = [x**2 for x in range(10)]
print(squares)

Kết quả:

Copy
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Lọc các số chẵn

python Copy
# Tạo một danh sách các số chẵn từ 0 đến 9
evens = [x for x in range(10) if x % 2 == 0]
print(evens)

Kết quả:

Copy
[0, 2, 4, 6, 8]

Chuyển đổi các chuỗi thành chữ hoa

python Copy
# Tạo một danh sách các chuỗi chữ hoa từ danh sách ban đầu
fruits = ["apple", "banana", "cherry"]
uppercase_fruits = [fruit.upper() for fruit in fruits]
print(uppercase_fruits)

Kết quả:

Copy
['APPLE', 'BANANA', 'CHERRY']

Sử dụng điều kiện if...else

python Copy
# Tạo một danh sách với các giá trị "Even" hoặc "Odd" dựa trên điều kiện
numbers = [1, 2, 3, 4, 5, 6]
even_odd = ["Even" if x % 2 == 0 else "Odd" for x in numbers]
print(even_odd)

Kết quả:

Copy
['Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even']

So sánh List Comprehension với các phương pháp khác

So sánh với vòng lặp for

Sử dụng vòng lặp for để tạo danh sách các số bình phương:

python Copy
# Sử dụng vòng lặp for
squares = []
for x in range(10):
    squares.append(x**2)
print(squares)

Kết quả:

Copy
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Sử dụng list comprehension để tạo danh sách các số bình phương:

python Copy
# Sử dụng list comprehension
squares = [x**2 for x in range(10)]
print(squares)

Kết quả:

Copy
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Như bạn có thể thấy, list comprehension ngắn gọn và dễ đọc hơn so với vòng lặp for.

So sánh với hàm map()

Sử dụng hàm map() để tạo danh sách các số bình phương:

python Copy
# Sử dụng hàm map
squares = list(map(lambda x: x**2, range(10)))
print(squares)

Kết quả:

Copy
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Sử dụng list comprehension để tạo danh sách các số bình phương:

python Copy
# Sử dụng list comprehension
squares = [x**2 for x in range(10)]
print(squares)

Kết quả:

Copy
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

List comprehension không chỉ ngắn gọn hơn mà còn dễ đọc hơn so với việc sử dụng hàm map() với lambda.

Ưu điểm và nhược điểm của List Comprehension

Ưu điểm

  1. Ngắn gọn và dễ đọc: List comprehension cho phép bạn viết các thao tác phức tạp trên danh sách trong một dòng mã, làm cho mã dễ đọc và duy trì hơn
  2. Hiệu suất cao: List comprehension thường nhanh hơn so với vòng lặp for truyền thống vì nó được tối ưu hóa cho hiệu suất
  3. Lọc và ánh xạ biểu cảm: List comprehension cho phép bạn kết hợp các thao tác lọc và ánh xạ trong một biểu thức duy nhất, tạo ra mã sạch và dễ hiểu
  4. Đa dụng: List comprehension không chỉ giới hạn ở danh sách; chúng có thể được sử dụng với các kiểu dữ liệu iterable khác như tuple và string

Nhược điểm

  1. Giới hạn về tính biểu cảm: Mặc dù list comprehension rất biểu cảm, chúng không phù hợp cho tất cả các kịch bản. Các thao tác phức tạp liên quan đến nhiều vòng lặp hoặc câu lệnh điều kiện có thể trở nên khó đọc khi bị ép vào một dòng
  2. Khó khăn trong việc gỡ lỗi: Gỡ lỗi list comprehension có thể khó khăn hơn so với gỡ lỗi vòng lặp for truyền thống. Các lỗi có thể không cung cấp số dòng rõ ràng, làm cho việc xác định vấn đề trở nên khó khăn hơn

Các ứng dụng nâng cao của List Comprehension

List Comprehension lồng nhau

List comprehension lồng nhau cho phép bạn tạo ra các danh sách phức tạp hơn bằng cách lồng các list comprehension bên trong nhau.

python Copy
# Tạo một ma trận 3x3
matrix = [[j for j in range(3)] for i in range(3)]
print(matrix)

Kết quả:

Copy
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]

Làm phẳng danh sách lồng nhau

python Copy
# Làm phẳng một danh sách lồng nhau
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [item for sublist in nested_list for item in sublist]
print(flat_list)

Kết quả:

Copy
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Sử dụng hàm và biểu thức phức tạp

python Copy
# Sử dụng hàm và biểu thức phức tạp trong list comprehension
from math import pi
pi_approximations = [str(round(pi, i)) for i in range(1, 6)]
print(pi_approximations)

Kết quả:

Copy
['3.1', '3.14', '3.142', '3.1416', '3.14159']

Khi nào nên sử dụng List Comprehension

List comprehension rất hữu ích khi bạn cần thực hiện các thao tác đơn giản và rõ ràng trên danh sách hoặc các iterable khác. Tuy nhiên, nếu bạn cần thực hiện các thao tác phức tạp hoặc nhiều bước, việc sử dụng vòng lặp for truyền thống hoặc các hàm khác có thể là lựa chọn tốt hơn để đảm bảo mã dễ đọc và duy trì.

Kết luận

List comprehension là một công cụ mạnh mẽ và linh hoạt trong Python, cho phép bạn tạo ra các danh sách mới từ các danh sách hiện có hoặc các iterable khác một cách ngắn gọn và dễ đọc. Mặc dù có một số hạn chế, nhưng khi được sử dụng đúng cách, list comprehension có thể giúp bạn viết mã hiệu quả và dễ duy trì hơn. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về list comprehension và cách sử dụng chúng trong Python.

Avatar
Được viết bởi

Admin Team

Gợi ý câu hỏi phỏng vấn

Không có dữ liệu

Không có dữ liệu

Gợi ý bài viết
Không có dữ liệu

Không có dữ liệu

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào