Việc hiểu danh sách Python bao gồm các dấu ngoặc chứa biểu thức, được thực thi cho từng phần tử cùng với vòng lặp for để lặp qua từng phần tử trong danh sách Python.
Khả năng hiểu danh sách của Python cung cấp cú pháp ngắn hơn nhiều để tạo danh sách mới dựa trên các giá trị của danh sách hiện có
Ưu điểm của việc hiểu danh sách
- Tiết kiệm thời gian và không gian hiệu quả hơn so với vòng lặp
- Yêu cầu ít dòng mã hơn
- Chuyển đổi câu lệnh lặp thành công thức
Cú pháp của Danh sách hiểu
danh sách mới = [ biểu thức [phần tử] cho phần tử trong danh sách cũ nếu điều kiện ]
Ví dụ về hiểu danh sách trong Python
ví dụ 1. Lặp lại với khả năng hiểu Danh sách
Python3
[0, 2, 4, 6, 8, 10]8
[0, 2, 4, 6, 8, 10]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]5
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]6
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7_______2_______8
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[0, 2, 4, 6, 8, 10]9
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
đầu ra
[1, 2, 3]
ví dụ 2. Danh sách chẵn sử dụng khả năng hiểu danh sách
Python3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']7
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']5
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]8
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.473_______36_______4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
đầu ra
[0, 2, 4, 6, 8, 10]
ví dụ 3. Ma trận sử dụng hiểu Danh sách
Python3
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.479
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']0
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]8
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']0
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]8
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]6
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3____45_______8
đầu ra
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]
Danh sách hiểu so với vòng lặp
Có nhiều cách khác nhau để lặp qua một danh sách. Tuy nhiên, cách phổ biến nhất là sử dụng vòng lặp for. Chúng ta hãy xem ví dụ dưới đây
Python3
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]9
[0, 2, 4, 6, 8, 10]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[10, 20, 30, 40, 50]2
[10, 20, 30, 40, 50]3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]3_______2_______4
[10, 20, 30, 40, 50]7
[10, 20, 30, 40, 50]8
[10, 20, 30, 40, 50]9
[0, 2, 4, 6, 8, 10]9
[10, 20, 30, 40, 50]1
[10, 20, 30, 40, 50]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[0, 2, 4, 6, 8, 10]9
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
đầu ra
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']
Trên đây là cách triển khai cách tiếp cận truyền thống để lặp qua danh sách, chuỗi, bộ dữ liệu, v.v. Bây giờ việc hiểu danh sách thực hiện nhiệm vụ tương tự và cũng làm cho chương trình đơn giản hơn.
Khả năng hiểu danh sách chuyển cách tiếp cận lặp truyền thống bằng cách sử dụng vòng lặp for thành một công thức đơn giản, do đó làm cho chúng dễ sử dụng. Dưới đây là cách tiếp cận để lặp qua một danh sách, chuỗi, tuple, v.v. sử dụng hiểu danh sách
Python3
[0, 2, 4, 6, 8, 10]8
[0, 2, 4, 6, 8, 10]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
[10, 20, 30, 40, 50]7
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.474
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[0, 2, 4, 6, 8, 10]9
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
đầu ra
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']
Phân tích thời gian trong việc hiểu danh sách và vòng lặp
Việc hiểu danh sách hiệu quả hơn cả về mặt tính toán cũng như về không gian mã hóa và thời gian so với vòng lặp for. Thông thường, chúng được viết trong một dòng mã. Chương trình dưới đây mô tả sự khác biệt giữa vòng lặp for và khả năng hiểu danh sách dựa trên hiệu suất
Python3
[0, 2, 4, 6, 8, 10]11
[0, 2, 4, 6, 8, 10]12
[0, 2, 4, 6, 8, 10]13
[0, 2, 4, 6, 8, 10]14
[0, 2, 4, 6, 8, 10]15
[0, 2, 4, 6, 8, 10]16
[10, 20, 30, 40, 50]9
[0, 2, 4, 6, 8, 10]18_______2_______0
[10, 20, 30, 40, 50]2
[10, 20, 30, 40, 50]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
[0, 2, 4, 6, 8, 10]26
[0, 2, 4, 6, 8, 10]27_______0_______28
[0, 2, 4, 6, 8, 10]29
[0, 2, 4, 6, 8, 10]29
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]8
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
[10, 20, 30, 40, 50]9
[0, 2, 4, 6, 8, 10]34
[0, 2, 4, 6, 8, 10]18
[0, 2, 4, 6, 8, 10]36
[0, 2, 4, 6, 8, 10]15
[0, 2, 4, 6, 8, 10]38
[10, 20, 30, 40, 50]9
[0, 2, 4, 6, 8, 10]34
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']9
[0, 2, 4, 6, 8, 10]29
[0, 2, 4, 6, 8, 10]29
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]8
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
[0, 2, 4, 6, 8, 10]49
[0, 2, 4, 6, 8, 10]50
[0, 2, 4, 6, 8, 10]51
[0, 2, 4, 6, 8, 10]52
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[0, 2, 4, 6, 8, 10]54
[0, 2, 4, 6, 8, 10]55
[0, 2, 4, 6, 8, 10]56
[0, 2, 4, 6, 8, 10]29
[0, 2, 4, 6, 8, 10]29
[0, 2, 4, 6, 8, 10]59
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
[0, 2, 4, 6, 8, 10]61____2_______0
[0, 2, 4, 6, 8, 10]54
[0, 2, 4, 6, 8, 10]64
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[0, 2, 4, 6, 8, 10]67
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
[0, 2, 4, 6, 8, 10]69
[0, 2, 4, 6, 8, 10]70
[0, 2, 4, 6, 8, 10]71
[0, 2, 4, 6, 8, 10]72
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]8
[0, 2, 4, 6, 8, 10]74
[0, 2, 4, 6, 8, 10]75
[0, 2, 4, 6, 8, 10]52
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[0, 2, 4, 6, 8, 10]54
[0, 2, 4, 6, 8, 10]79
[0, 2, 4, 6, 8, 10]56
[0, 2, 4, 6, 8, 10]29
[0, 2, 4, 6, 8, 10]29
[0, 2, 4, 6, 8, 10]59
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
[0, 2, 4, 6, 8, 10]61____2_______0
[0, 2, 4, 6, 8, 10]54
[0, 2, 4, 6, 8, 10]64
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[0, 2, 4, 6, 8, 10]91
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
[0, 2, 4, 6, 8, 10]69
[0, 2, 4, 6, 8, 10]70
[0, 2, 4, 6, 8, 10]71
[0, 2, 4, 6, 8, 10]72
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]8
[0, 2, 4, 6, 8, 10]74
đầu ra
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.47
Từ chương trình trên, chúng ta có thể thấy việc hiểu danh sách khá nhanh hơn so với vòng lặp for
Hiểu danh sách lồng nhau
Việc hiểu danh sách lồng nhau không là gì ngoài việc hiểu danh sách trong một cách hiểu danh sách khác, khá giống với các vòng lặp lồng nhau. Dưới đây là chương trình thực hiện vòng lặp lồng nhau
Python3
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.479
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[10, 20, 30, 40, 50]2
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']0_______2_______08
[10, 20, 30, 40, 50]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]10
[10, 20, 30, 40, 50]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]12
[10, 20, 30, 40, 50]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]3_______2_______4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]19
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]08
[0, 2, 4, 6, 8, 10]27_______2_______22
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3____45_______8
đầu ra
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
Giờ đây, bằng cách sử dụng tính năng hiểu danh sách lồng nhau, cùng một đầu ra có thể được tạo ra với ít dòng mã hơn
Python3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]25
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.479
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]1_______2_______2
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]19
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]8
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']0
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]8
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3____45_______8
Đầu ra
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
Danh sách hiểu và Lambda
Biểu thức Lambda không là gì ngoài các biểu diễn tốc ký của các hàm Python. Sử dụng khả năng hiểu danh sách với lambda tạo ra sự kết hợp hiệu quả. Chúng ta hãy xem các ví dụ dưới đây
Python3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]45
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]46_______2_______0
[10, 20, 30, 40, 50]2
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1_______2_______4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]6
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
[0, 2, 4, 6, 8, 10]59
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]08
[10, 20, 30, 40, 50]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]59
[0, 2, 4, 6, 8, 10]29
[0, 2, 4, 6, 8, 10]56
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3_______2_______64
Đầu ra
[10, 20, 30, 40, 50]
Ở đây, chúng tôi đã sử dụng vòng lặp for để in bảng 10
Python3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]46_______2_______0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']9
[0, 2, 4, 6, 8, 10]29_______0_______56
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]6
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
[0, 2, 4, 6, 8, 10]59
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]8
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3_______2_______64
đầu ra
[10, 20, 30, 40, 50]
Bây giờ ở đây, chúng tôi chỉ sử dụng cách hiểu danh sách để hiển thị bảng 10
Python3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]45
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]46_______2_______0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]86
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]88
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]89
[0, 2, 4, 6, 8, 10]29
[0, 2, 4, 6, 8, 10]56
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]92
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4_______2_______6_______2_______7_______0____1_______590
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3_______2_______64
đầu ra
[10, 20, 30, 40, 50]
Cuối cùng, chúng tôi sử dụng lambda + hiểu danh sách để hiển thị bảng 10. Sự kết hợp này rất hữu ích để có được các giải pháp hiệu quả với ít dòng mã hơn cho các vấn đề phức tạp
Điều kiện trong danh sách hiểu
Chúng ta cũng có thể thêm các câu điều kiện để hiểu danh sách. Chúng ta có thể tạo một danh sách bằng cách sử dụng phạm vi [], toán tử, v.v. và cal cũng áp dụng một số điều kiện cho danh sách bằng câu lệnh if
Những điểm chính
- Hiểu danh sách là một phương tiện hiệu quả để mô tả và xây dựng danh sách dựa trên danh sách hiện tại
- Nói chung, việc hiểu danh sách nhẹ hơn và đơn giản hơn so với các vòng lặp và chức năng hình thành danh sách tiêu chuẩn
- Chúng ta không nên viết mã dài để hiểu danh sách nhằm đảm bảo mã thân thiện với người dùng
- Mọi cách hiểu về danh sách có thể được viết lại trong vòng lặp for, nhưng trong ngữ cảnh diễn giải danh sách, mọi vòng lặp for không thể được viết lại
Dưới đây là một số ví dụ mô tả việc sử dụng khả năng hiểu danh sách thay vì cách tiếp cận truyền thống để lặp qua các lần lặp
ví dụ 1. Hiểu danh sách Python bằng cách sử dụng If-else
Python3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']04
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]5
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']07
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]8
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.473
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']15_______12_______16
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']17
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']23
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]8
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']26
đầu ra
[0, 2, 4, 6, 8, 10]1
ví dụ 2. IF lồng nhau với khả năng hiểu danh sách
Python3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']04
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']29_______2_______2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']31
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']35
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']15_______12_______7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']31
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]19
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.473
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']31
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']9
[0, 2, 4, 6, 8, 10]56
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.473
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.474
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']26
đầu ra
[0, 2, 4, 6, 8, 10]2
ví dụ 3. Hiển thị ô vuông các số từ 1 đến 10
Python3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']55
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']56
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']58
[0, 2, 4, 6, 8, 10]29
[0, 2, 4, 6, 8, 10]29
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]8
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']63_______2_______4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]6
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']5
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]8
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']71
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']73
đầu ra
[0, 2, 4, 6, 8, 10]3
Ví dụ 4. Hiển thị Chuyển vị của 2D-Ma trận
Python3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']74
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']75
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']77
[0, 2, 4, 6, 8, 10]56
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']80
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']82
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']83
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']84_______2_______5
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']86
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']88
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']90
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']83
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']84_______2_______5
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']94
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']96
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']98
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']00
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']01
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']03
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1_______2_______4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']07
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]3
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']13
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']14
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.473
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']16
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']18
đầu ra
[0, 2, 4, 6, 8, 10]4
Ví dụ 5. Chuyển đổi trường hợp của từng ký tự trong một chuỗi
Python3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']19
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']20_______2_______0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']22
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']23
[0, 2, 4, 6, 8, 10]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]86
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]88
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']31
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']32
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']34
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']35
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']36
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']37
[10, 20, 30, 40, 50]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[0, 2, 4, 6, 8, 10]9
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
đầu ra
[0, 2, 4, 6, 8, 10]5
Ví dụ 6. Đảo ngược từng chuỗi trong một tuple
Python3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']43
[0, 2, 4, 6, 8, 10]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']46
[0, 2, 4, 6, 8, 10]71
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]6
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.474
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']20
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']54
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']56
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']54
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]8
[10, 20, 30, 40, 50]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']4
[0, 2, 4, 6, 8, 10]9
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']6
đầu ra
[0, 2, 4, 6, 8, 10]6
Ví dụ 7. Hiển thị tổng các chữ số của tất cả các phần tử lẻ trong danh sách
Python3
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']65
[0, 2, 4, 6, 8, 10]15
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']67
[10, 20, 30, 40, 50]9
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']69
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.473
[10, 20, 30, 40, 50]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']74_______2_______4
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']76
[0, 2, 4, 6, 8, 10]26
[0, 2, 4, 6, 8, 10]27_______12_______69
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']80
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']82
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']83
[10, 20, 30, 40, 50]9
[0, 2, 4, 6, 8, 10]34
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']69
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']87
[0, 2, 4, 6, 8, 10]9
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]0
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]5
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']91
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']93
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']95
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']97
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']99
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]7
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.4701
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.474
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.4703
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.4704_______2_______0
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.4706
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]2
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']1
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]4
[0, 2, 4, 6, 8, 10]9
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']7
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.4712
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]6
Time taken for_loop: 0.56 Time taken for list_comprehension: 0.474