A list comprehension là một cách ngắn gọn để tạo ra các danh sách. Nó tương tự như ký hiệu xây dựng tập hợp trong toán học. Nó được sử dụng để định nghĩa một list dựa trên một đối tượng có thể lặp lại hiện có, chẳng hạn như danh sách, tuple hoặc chuỗi, và áp dụng một biểu thức cho mỗi phần tử trong đối tượng có thể lặp lại.
Cú pháp cơ bản của list comprehension là −
new_list = [expression for item in iterable if condition]
Nơi nào,
Giả sử chúng ta muốn chuyển tất cả các chữ cái trong chuỗi "hello world" thành dạng chữ hoa. Sử dụng list comprehension, chúng ta lặp qua từng ký tự, kiểm tra xem nó có phải là một chữ cái không, và nếu có, chuyển nó thành chữ hoa, dẫn đến một danh sách các chữ cái viết hoa.
string = "hello world" uppercase_letters = [char.upper() for char in string if char.isalpha()] print(uppercase_letters)
Kết quả thu được được hiển thị như sau −
['H', 'E', 'L', 'L', 'O', 'W', 'O', 'R', 'L', 'D']
Trong Python, lambda là một từ khóa được sử dụng để tạo ra các hàm ẩn danh. Một hàm ẩn danh là một hàm được định nghĩa mà không có tên. Những hàm này được tạo ra bằng cách sử dụng từ khóa lambda theo sau là danh sách các đối số ngăn cách bằng dấu phẩy, theo sau là dấu hai chấm : , và sau đó là biểu thức sẽ được đánh giá.
Chúng ta có thể sử dụng list comprehension với lambda bằng cách áp dụng hàm lambda cho từng phần tử của một iterable trong comprehension, tạo ra một danh sách mới.
Trong ví dụ sau, chúng ta sử dụng list comprehension với một hàm lambda để nhân đôi mỗi phần tử trong danh sách "original_list". Chúng ta lặp qua từng phần tử trong "original_list" và áp dụng hàm lambda để nhân đôi nó −
original_list = [1, 2, 3, 4, 5] doubled_list = [(lambda x: x * 2)(x) for x in original_list] print(doubled_list)
Dưới đây là kết quả của đoạn mã trên −
[2, 4, 6, 8, 10]
Một vòng lặp lồng nhau trong Python là một vòng lặp nằm bên trong một vòng lặp khác, trong đó vòng lặp bên trong được thực hiện nhiều lần cho mỗi lần lặp của vòng lặp bên ngoài.
Chúng ta có thể sử dụng vòng lặp lồng nhau trong biểu thức danh sách bằng cách đặt một vòng lặp bên trong vòng lặp khác, cho phép tạo danh sách một cách ngắn gọn từ nhiều lần lặp.
Trong ví dụ này, tất cả các tổ hợp của các mục từ hai danh sách dưới dạng một tuple được thêm vào một đối tượng danh sách thứ ba.
list1=[1,2,3] list2=[4,5,6] CombLst=[(x,y) for x in list1 for y in list2] print (CombLst)
Nó sẽ tạo ra đầu ra sau đây −
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
Câu điều kiện trong Python đề cập đến việc sử dụng các câu lệnh như "if", "elif" và "else" để kiểm soát luồng mã dựa trên các điều kiện nhất định. Chúng cho phép bạn thực thi các khối mã khác nhau tùy thuộc vào việc một điều kiện có đánh giá là "True" hay "False".
Chúng ta có thể sử dụng điều kiện trong biểu thức danh sách bằng cách bao gồm chúng sau phần iterable và trước vòng lặp, điều này lọc các phần tử từ iterable dựa trên điều kiện đã chỉ định trong khi tạo danh sách.
Ví dụ sau sử dụng các điều kiện trong một biểu thức danh sách để tạo ra một danh sách các số chẵn từ 1 đến 20 −
list1=[x for x in range(1,21) if x%2==0] print (list1)
Chúng ta nhận được đầu ra như sau −
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
List comprehensions và vòng lặp for đều được sử dụng để lặp qua, nhưng chúng khác nhau về cú pháp và cách sử dụng.
List comprehensions giống như các phím tắt để tạo danh sách trong Python. Chúng cho phép bạn tạo ra một danh sách mới bằng cách áp dụng một phép toán cho từng mục trong một danh sách hiện có.
Ngược lại, vòng lặp for là một câu lệnh điều khiển luồng được sử dụng để lặp qua các phần tử của một đối tượng có thể lặp lại (iterable) từng cái một, thực thi một khối mã cho mỗi phần tử.
List comprehensions are often preferred for simpler operations, while for loops offer more flexibility for complex tasks.
Giả sử chúng ta muốn tách biệt từng chữ cái trong một chuỗi và đưa tất cả các chữ cái không phải là nguyên âm vào một đối tượng danh sách. Chúng ta có thể làm điều đó bằng cách sử dụng vòng lặp for như dưới đây −
chars=[] for ch in 'TutorialsPoint': if ch not in 'aeiou': chars.append(ch) print (chars)
Đối tượng danh sách chars được hiển thị như sau −
['T', 't', 'r', 'l', 's', 'P', 'n', 't']
Chúng ta có thể dễ dàng đạt được kết quả tương tự bằng kỹ thuật hiểu danh sách. Cách sử dụng chung của hiểu danh sách như sau −
listObj = [x for x in iterable]
Áp dụng điều này, danh sách ký tự có thể được xây dựng bằng câu lệnh sau −
chars = [ char for char in 'TutorialsPoint' if char not in 'aeiou'] print (chars)
Danh sách ký tự sẽ được hiển thị như trước −
['T', 't', 'r', 'l', 's', 'P', 'n', 't']
Ví dụ sau sử dụng list comprehension để tạo ra một danh sách các bình phương của các số từ 1 đến 10 −
squares = [x*x for x in range(1,11)] print (squares)
Đối tượng danh sách các hình vuông là −
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Dưới đây là những lợi ích của việc sử dụng list comprehension −
Conciseness − Các biểu thức danh sách (list comprehensions) ngắn gọn và dễ đọc hơn so với các vòng lặp for truyền thống, cho phép bạn tạo danh sách với ít mã hơn.
Efficiency − Các biểu thức danh sách (list comprehensions) thường nhanh hơn và hiệu quả hơn so với vòng lặp for vì chúng được tối ưu hóa bên trong bởi trình thông dịch của Python.
Clarity − Các phép hiểu danh sách tạo ra mã rõ ràng và biểu cảm hơn, giúp dễ dàng hiểu được mục đích và logic của phép toán đang được thực hiện.
Reduced Chance of Errors − Vì list comprehensions gọn gàng hơn, nên có ít khả năng xảy ra lỗi hơn so với các vòng lặp for truyền thống, giảm khả năng xuất hiện lỗi trong mã của bạn.