Xem thêm

Cách sử dụng List comprehension trong Python

Huy Erick
Có thể bạn đã từng nghe đến cách sử dụng List Comprehension trong ngôn ngữ lập trình Python và có thể đã thực hiện mà không thực sự hiểu rõ về chúng. Vì vậy, trong...

Có thể bạn đã từng nghe đến cách sử dụng List Comprehension trong ngôn ngữ lập trình Python và có thể đã thực hiện mà không thực sự hiểu rõ về chúng. Vì vậy, trong bài viết này, chúng ta sẽ cùng tìm hiểu và hướng dẫn cách sử dụng List Comprehension trong Python.

List Comprehension trong Python là gì?

List Comprehension (cách viết code ngắn gọn để tạo một danh sách phức tạp) có vẻ phức tạp nhưng thực tế không như vậy. Trong Python, nó chỉ đơn giản là cách nhanh chóng để lọc hoặc chỉnh sửa một danh sách dựa trên một số tiêu chí. List Comprehension giúp bạn viết code ngắn gọn (đặc biệt khi đang ở trong một vòng lặp đã có) và dễ đọc, nhìn code hơn.

Cách sử dụng List Comprehensions trong Python

Lưu ý: Các ví dụ dưới đây sử dụng Python 3.6.

Hãy xem xét đoạn code sau đây, nó sao chép một mảng và biến các chữ cái trong mảng này thành chữ viết hoa. Nó thực hiện điều này bằng cách lặp lại từng mục trong mảng.

letters = ['a', 'b', 'c', 'd']
print(letters)
upper_letters = []
for letter in letters:
    result = letter.upper()
    upper_letters.append(result)
print(upper_letters)

Kết quả sử dụng vòng lặp

Bây giờ, ví dụ dưới đây cũng tương tự như trên, nhưng thực hiện trong một dòng code duy nhất sử dụng List Comprehension Python cơ bản:

letters = ['a', 'b', 'c', 'd']
print(letters)
upper_letters = [x.upper() for x in letters]
print(upper_letters)

Kết quả sử dụng List Comprehension

Như bạn có thể thấy, kết quả của hai đoạn code trên là giống nhau, nhưng List Comprehension sử dụng ít code hơn.

Nếu bạn thấy khó hiểu, chúng ta sẽ phân tích ví dụ sử dụng List Comprehension một chút.

Ví dụ này tạo ra một danh sách được gọi là letters để lưu trữ các chữ thường "a", "b", "c" và "d". Giả sử bạn muốn chuyển đổi tất cả các phần tử trong danh sách này thành chữ hoa mà không sử dụng List Comprehension, bạn sẽ cần tạo một danh sách mới để lưu trữ kết quả (gọi là upper_letters), lặp qua từng phần tử trong danh sách letters, chuyển đổi chữ cái (và lưu trữ nó trong result), và sau đó thêm chữ viết hoa vào danh sách mới. Bạn có thể thấy rằng có quá nhiều việc phải làm.

List Comprehension ở đây gần như tương đương với việc thay thế vòng lặp. Nó chuyển đổi mỗi chữ cái trong danh sách letters và trả về kết quả là một danh sách mới. List Comprehension chỉ làm việc trên danh sách và trả về danh sách mới.

Có ba phần trong List Comprehension. List Comprehension phải bắt đầu và kết thúc bằng dấu ngoặc vuông ([]). Đây là cách nó được thiết kế và cho phép Python biết rằng bạn sẽ làm việc với một danh sách.

Bên trong dấu ngoặc vuông này, bạn cần bắt đầu với kết quả mong muốn. Đây là những gì bạn muốn làm với mỗi phần tử trong danh sách. Trong ví dụ trên, đoạn code sau chuyển đổi mỗi phần tử (được tham chiếu bằng biến x) thành chữ viết hoa sử dụng phương thức upper(), là một phần của thư viện Python cơ bản:

[x.upper()  for x in letters]

Tiếp theo, bạn cần cho Python biết danh sách cần làm việc và gán mỗi phần tử riêng biệt với một biến. Điều này hoàn toàn tương tự như vòng lặp trong ví dụ trước:

for x in letters

Mỗi khi vòng lặp đi qua danh sách, giá trị của x sẽ thay đổi thành bất kỳ phần tử hiện tại nào. Nó sẽ bắt đầu với "a", sau đó là "b", và tiếp tục như vậy.

Nếu bạn kết hợp tất cả lại (và gán cho một biến được gọi là upper_letters), bạn sẽ thực hiện như sau:

upper_letters = [x.upper() for x in letters]

Bây giờ, upper_letters sẽ chứa một danh sách các chữ hoa, bắt đầu từ "A", sau đó là "B", vv...

Phần thứ ba của List Comprehension trong Python

Như đã đề cập ở trên, đây là phần thứ ba của List Comprehension. Khi đã thực hiện hai bước trên, bạn có thể thêm điều kiện tùy chọn. Đây cũng giống như sử dụng lệnh if để chỉ cho Python tạo ra một danh sách mới, dựa trên danh sách cũ nhưng chỉ chứa các phần tử phù hợp với tiêu chí được đề ra.

Đây là đoạn code thực hiện:

ages = [1, 34, 5, 7, 3, 57, 356]
print(ages)
old_ages = [x for x in ages if x > 10]
print(old_ages)

Kết quả lọc tuổi lớn hơn 10

Ví dụ này sử dụng một danh sách mới được gọi là ages. Danh sách old_ages được tạo bằng cách sử dụng List Comprehension. Điều kiện if ở cuối nghĩa là chỉ có các phần tử trong danh sách phù hợp với tiêu chí mới được thêm vào danh sách mới. Trong ví dụ này, chỉ các tuổi lớn hơn 10 được thêm vào danh sách.

Trường hợp không nên sử dụng List Comprehension

List Comprehension rất tuyệt, nhưng không phải trường hợp nào cũng phù hợp để sử dụng nó. Bạn không nên sử dụng nó khi có nhiều hơn một điều kiện.

old_ages = [x for x in ages if x > 10 and x < 100 and x is not None]

Đoạn code này vẫn hoạt động, nhưng nó trở nên dài và khó hiểu. Tương tự, bất kỳ code nào có nhiều hơn một chức năng đơn giản cũng không nên sử dụng List Comprehension. Trong ví dụ này, bạn sẽ nhận được lỗi:

letters = ['a', 'b', 'c', 'd', 2]
print(letters)
upper_letters = [x.upper() for x in letters]
print(upper_letters)

Lỗi khi sử dụng List Comprehension

Đây là mã hoàn toàn hợp lệ, nhưng vì bạn không thể chuyển đổi số thành chữ hoa, nên nó không hoạt động. Trong trường hợp này, bạn nên sử dụng vòng lặp vì nó cho phép xử lý các ngoại lệ:

letters = ['a', 'b', 'c', 'd', 1]
print(letters)
upper_letters = []
for letter in letters:
    try:
        result = letter.upper()
        upper_letters.append(result)
    except AttributeError:
        pass  # không làm gì cả
print(upper_letters)

Kết quả sử dụng vòng lặp khi có cả chữ và số

Bây giờ bạn đã biết cách sử dụng List Comprehension, không có lý do gì để không sử dụng nó để đơn giản hóa code và giúp nó dễ hiểu hơn.

Chúc các bạn thực hiện thành công!

Xem thêm:

1