Chúng ta có thể tạo các chuỗi (sequences) mới bằng cách sử dụng một chuỗi Python cho trước. Điều này gọi là comprehension (hiểu nén). về cơ bản, đây là một cách viết khối mã ngắn gọn để tạo ra một chuỗi có thể là list, dictionary, set hoặc generator bằng cách sử dụng một chuỗi khác. Nó có thể liên quan đến nhiều bước chuyển đổi giữa các loại chuỗi khác nhau.
List Comprehension (Hiểu nén danh sách)
Trong phương pháp này, chúng ta tạo một danh sách mới bằng cách thao tác các giá trị của một danh sách hiện có. Trong ví dụ dưới đây, chúng ta lấy một danh sách và tạo một danh sách mới bằng cách thêm 3 vào mỗi phần tử của danh sách cho trước.
Ví dụ
given_list = [x for x in range(5)] print(given_list) new_list = [var + 3 for var in given_list] print(new_list)
Kết quả
Chạy mã trên cho kết quả sau:
[0, 1, 2, 3, 4] [3, 4, 5, 6, 7]
Dictionary Comprehensions (Hiểu nén từ điển)
Tương tự như trên, chúng ta có thể lấy một danh sách và tạo một dictionary từ nó.
Ví dụ
given_list = [x for x in range(5)]
print(given_list)
new_dict = {var: var + 3 for var in given_list}
print(new_dict)
Kết quả
Chạy mã trên cho kết quả sau:
[0, 1, 2, 3, 4]
{0: 3, 1: 4, 2: 5, 3: 6, 4: 7}
Chúng ta cũng có thể lấy hai danh sách và tạo một dictionary mới từ chúng.
Ví dụ
list1 = [x for x in range(5)]
list2 = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
print(list1)
print(list2)
new_dict = {key: value for (key, value) in zip(list1, list2)}
print(new_dict)
Kết quả
Chạy mã trên cho kết quả sau:
[0, 1, 2, 3, 4]
['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
{0: 'Mon', 1: 'Tue', 2: 'Wed', 3: 'Thu', 4: 'Fri'}
Set Comprehension (Hiểu nén tập hợp)
Chúng ta có thể采取 cách tiếp cận tương tự như trên và tạo tập hợp mới từ tập hợp hoặc danh sách hiện có. Trong ví dụ dưới đây, chúng ta tạo một tập hợp mới bằng cách thêm 3 vào các phần tử của tập hợp hiện có.
Ví dụ
given_set = {x for x in range(5)}
print(given_set)
new_set = {var + 3 for var in given_set}
print(new_set)
Kết quả
Chạy mã trên cho kết quả sau:
{0, 1, 2, 3, 4}
{3, 4, 5, 6, 7}
Generator Comprehension (Hiểu nén generator)
Generator mới có thể được tạo từ danh sách hiện có. Các generator này hiệu quả về bộ nhớ vì chúng cấp phát bộ nhớ khi các mục được tạo ra thay vì cấp phát ngay từ đầu.
Ví dụ
given_list = [x for x in range(5)]
print(given_list)
new_gen = (var + 3 for var in given_list)
for var1 in new_gen:
print(var1, end=" ")
Kết quả
Chạy mã trên cho kết quả sau:
[0, 1, 2, 3, 4] 3 4 5 6 7