Hướng dẫn what does list comprehension mean in python - hiểu danh sách có nghĩa là gì trong python

Danh sách hiểu trong Python là một cú pháp dễ dàng và nhỏ gọn để tạo danh sách từ một chuỗi hoặc danh sách khác. Đó là một cách rất ngắn gọn để tạo một danh sách mới bằng cách thực hiện một thao tác trên mỗi mục trong danh sách hiện có. Danh sách hiểu nhanh hơn đáng kể so với xử lý một danh sách bằng cách sử dụng vòng lặp.

[expression for element in iterable if condition]

Theo cú pháp trên, cú pháp hiểu biết danh sách chứa ba phần: một biểu thức, một hoặc nhiều cho vòng lặp và tùy chọn, một hoặc nhiều điều kiện nếu điều kiện. Danh sách hiểu phải nằm trong khung vuông

even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
2. Kết quả của biểu thức đầu tiên sẽ được lưu trữ trong danh sách mới. Vòng lặp For được sử dụng để lặp lại trên đối tượng có thể tùy chọn bao gồm điều kiện if.

Giả sử chúng ta muốn tìm các số chẵn từ 0 đến 20 sau đó chúng ta có thể thực hiện nó bằng cách sử dụng một vòng lặp, như được hiển thị bên dưới:

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Kết quả tương tự có thể dễ dàng đạt được bằng cách sử dụng kỹ thuật hiểu danh sách dưới đây.

even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Trong ví dụ trên,

even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
3 trả về một danh sách mới bằng cách sử dụng danh sách hiểu. Đầu tiên, nó thực thi For Loop
even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
4. Phần tử
even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
5 sẽ được trả về nếu điều kiện được chỉ định
even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
6 đánh giá là TRUE. Nếu điều kiện đánh giá là TRUE, thì biểu thức trước cho vòng lặp sẽ được thực thi và lưu trữ trong danh sách mới. Ở đây, biểu thức
even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
5 chỉ đơn giản lưu trữ giá trị của
even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
5 vào một danh sách mới.

Danh sách hiểu biết hoạt động với danh sách chuỗi cũng. Sau đây tạo ra một danh sách các chuỗi mới có chứa 'A'.

names = ['Steve', 'Bill', 'Ram', 'Mohan', 'Abdul']
names2 = [s for s in names if 'a' in s]
print(names2)

Trên đây, biểu thức

even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
9 trả về đúng nếu một phần tử chứa một ký tự 'A'. Vì vậy, danh sách mới sẽ bao gồm các tên có chứa 'A'.

Ví dụ sau đây sử dụng danh sách hiểu biết để xây dựng 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(11)] 
print(squares) 

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

Ở trên, A cho Loop

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
0 được thực thi mà không có điều kiện nếu điều kiện. Biểu thức trước cho Loop
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
1 lưu trữ bình phương của phần tử trong danh sách mới.

Danh sách hiểu biết bằng cách sử dụng các vòng lặp lồng nhau

Có thể sử dụng các vòng lặp lồng nhau trong một biểu thức hiểu danh sách. Trong ví dụ sau, tất cả các kết hợp các mục từ hai danh sách dưới dạng một tuple được thêm vào trong một đối tượng danh sách thứ ba.

nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
nums=[(x,y) for x in nums1 for y in nums2]
print(nums)

[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

Liệt kê sự hiểu biết với nhiều điều kiện nếu điều kiện

Chúng ta có thể sử dụng lồng nhau nếu các điều kiện với một danh sách hiểu.

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
0

Liệt kê sự hiểu biết với điều kiện IF-Else

Ví dụ sau đây cho thấy vòng lặp if..else với sự hiểu biết danh sách.

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
1

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
2

Danh sách phẳng bằng cách sử dụng danh sách hiểu

Một trong những ứng dụng của sự hiểu biết danh sách là làm phẳng danh sách bao gồm nhiều danh sách vào một danh sách duy nhất.

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
3

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
4

Tìm hiểu thêm về cách làm phẳng danh sách trong Python.

Danh sách hiểu so với vòng lặp trong Python

Giả sử, chúng tôi muốn tách các chữ cái của từ

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
2 và thêm các chữ cái làm mục của một danh sách. Điều đầu tiên xuất hiện trong tâm trí sẽ được sử dụng cho Loop.


Ví dụ 1: Lặp lại qua một chuỗi sử dụng cho vòng lặp

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
5

Khi chúng tôi chạy chương trình, đầu ra sẽ là:

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
6

Tuy nhiên, Python có một cách dễ dàng hơn để giải quyết vấn đề này bằng cách sử dụng danh sách hiểu. Danh sách hiểu là một cách thanh lịch để xác định và tạo danh sách dựa trên danh sách hiện có.

Hãy để xem cách chương trình trên có thể được viết bằng cách sử dụng toàn bộ danh sách.


Ví dụ 2: Lặp lại qua chuỗi bằng cách sử dụng danh sách hiểu

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
7

Khi chúng tôi chạy chương trình, đầu ra sẽ là:

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
6

Tuy nhiên, Python có một cách dễ dàng hơn để giải quyết vấn đề này bằng cách sử dụng danh sách hiểu. Danh sách hiểu là một cách thanh lịch để xác định và tạo danh sách dựa trên danh sách hiện có.


Hãy để xem cách chương trình trên có thể được viết bằng cách sử dụng toàn bộ danh sách.

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)
9

Hướng dẫn what does list comprehension mean in python - hiểu danh sách có nghĩa là gì trong python

Ví dụ 2: Lặp lại qua chuỗi bằng cách sử dụng danh sách hiểu

Trong ví dụ trên, một danh sách mới được gán cho biến H_Letters và danh sách chứa các mục của chuỗi 'con người'. Chúng tôi gọi hàm

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
3 để nhận đầu ra.

Cú pháp của danh sách hiểu


Bây giờ chúng ta có thể xác định nơi sử dụng toàn bộ danh sách.

Nếu bạn nhận thấy,

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
2 là một chuỗi, không phải là một danh sách. Đây là sức mạnh của sự hiểu biết danh sách. Nó có thể xác định khi nào nó nhận được một chuỗi hoặc một tuple và hoạt động trên nó như một danh sách.

Bạn có thể làm điều đó bằng cách sử dụng các vòng lặp. Tuy nhiên, không phải mọi vòng lặp đều có thể được viết lại dưới dạng hiểu biết danh sách. Nhưng khi bạn học và cảm thấy thoải mái với các toàn bộ danh sách, bạn sẽ thấy mình thay thế ngày càng nhiều vòng lặp bằng cú pháp thanh lịch này.

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
0

Liệt kê toàn diện so với các chức năng Lambda

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
1

Danh sách toàn diện không phải là cách duy nhất để làm việc trong danh sách. Các chức năng tích hợp khác nhau và các chức năng Lambda có thể tạo và sửa đổi danh sách trong các dòng mã ít hơn.


Ví dụ 3: Sử dụng các hàm Lambda bên trong danh sách

Khi chúng tôi chạy chương trình, đầu ra sẽ

Tuy nhiên, sự hiểu biết danh sách thường dễ đọc của con người hơn các chức năng Lambda. Nó dễ dàng hơn để hiểu những gì lập trình viên đã cố gắng thực hiện khi sử dụng toàn bộ danh sách.

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
2

Điều kiện trong danh sách hiểu

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
3

Danh sách các hệ thống có thể sử dụng câu lệnh có điều kiện để sửa đổi danh sách hiện có (hoặc các bộ dữ liệu khác). Chúng tôi sẽ tạo danh sách sử dụng toán tử toán học, số nguyên và phạm vi ().

Ví dụ 4: Sử dụng nếu có danh sách hiểu

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
4

Điều kiện trong danh sách hiểu

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
5

Danh sách các hệ thống có thể sử dụng câu lệnh có điều kiện để sửa đổi danh sách hiện có (hoặc các bộ dữ liệu khác). Chúng tôi sẽ tạo danh sách sử dụng toán tử toán học, số nguyên và phạm vi ().

  1. Ví dụ 4: Sử dụng nếu có danh sách hiểu
  2. Khi chúng tôi chạy chương trình trên, đầu ra sẽ là:

Danh sách, number_list, sẽ được điền bởi các mục trong phạm vi từ 0-19 nếu giá trị của vật phẩm chia hết cho 2.

Ví dụ 5: Nested nếu có danh sách hiểu

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
6

Điều kiện trong danh sách hiểu

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
7

Danh sách các hệ thống có thể sử dụng câu lệnh có điều kiện để sửa đổi danh sách hiện có (hoặc các bộ dữ liệu khác). Chúng tôi sẽ tạo danh sách sử dụng toán tử toán học, số nguyên và phạm vi ().


Ví dụ 4: Sử dụng nếu có danh sách hiểu

Khi chúng tôi chạy chương trình trên, đầu ra sẽ là:

Danh sách, number_list, sẽ được điền bởi các mục trong phạm vi từ 0-19 nếu giá trị của vật phẩm chia hết cho 2.

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
8

Ví dụ 5: Nested nếu có danh sách hiểu

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
9

Ở đây, danh sách kiểm tra hiểu biết:

Y có phải chia cho 2 hay không?

Ví dụ 8: Chuyển đổi ma trận bằng cách sử dụng danh sách hiểu biết

even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
0

Khi chúng tôi chạy chương trình trên, đầu ra sẽ là:

even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)
1

Trong chương trình trên, chúng tôi có một ma trận thay đổi có các hàng

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
7 và cột
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
8. Chúng tôi cần tìm sự chuyển đổi của ma trận. Đối với điều đó, chúng tôi đã sử dụng danh sách hiểu.

** Lưu ý: Các vòng lặp lồng nhau trong danh sách hiểu don don hoạt động như các vòng lặp lồng nhau thông thường. Trong chương trình trên,

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
9 được thực hiện trước
names = ['Steve', 'Bill', 'Ram', 'Mohan', 'Abdul']
names2 = [s for s in names if 'a' in s]
print(names2)
0. Do đó, lúc đầu, một giá trị được gán cho tôi sau đó mục được hướng bởi
names = ['Steve', 'Bill', 'Ram', 'Mohan', 'Abdul']
names2 = [s for s in names if 'a' in s]
print(names2)
1 được thêm vào trong biến chuyển vị.
The nested loops in list comprehension don’t work like normal nested loops. In the above program,
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
9 is executed before
names = ['Steve', 'Bill', 'Ram', 'Mohan', 'Abdul']
names2 = [s for s in names if 'a' in s]
print(names2)
0. Hence at first, a value is assigned to i then item directed by
names = ['Steve', 'Bill', 'Ram', 'Mohan', 'Abdul']
names2 = [s for s in names if 'a' in s]
print(names2)
1 is appended in the transpose variable.


Những điểm chính cần nhớ

  • Danh sách hiểu là một cách thanh lịch để xác định và tạo danh sách dựa trên danh sách hiện có.
  • Danh sách hiểu thường nhỏ gọn và nhanh hơn các hàm và vòng lặp bình thường để tạo danh sách.
  • Tuy nhiên, chúng ta nên tránh viết các toàn bộ danh sách rất dài trong một dòng để đảm bảo rằng mã thân thiện với người dùng.
  • Hãy nhớ rằng, mọi danh sách hiểu có thể được viết lại cho Loop, nhưng mỗi vòng lặp đều có thể được viết lại dưới dạng danh sách hiểu.

Danh sách hiểu trong Python là gì?

Một danh sách Python hiểu bao gồm các dấu ngoặc chứa biểu thức, được thực thi cho mỗi phần tử cùng với vòng lặp để lặp lại trên mỗi phần tử trong danh sách Python. Sự hiểu biết danh sách Python cung cấp một cú pháp ngắn hơn nhiều để tạo một danh sách mới dựa trên các giá trị của một danh sách hiện có.consists of brackets containing the expression, which is executed for each element along with the for loop to iterate over each element in the Python list. Python List comprehension provides a much more short syntax for creating a new list based on the values of an existing list.

Danh sách hiểu biết giải thích là gì?

Danh sách hiểu là một cách dễ đọc, nhỏ gọn và thanh lịch để tạo một danh sách từ bất kỳ đối tượng có thể lặp lại hiện có nào.Về cơ bản, đó là một cách đơn giản hơn để tạo một danh sách mới từ các giá trị trong danh sách bạn đã có.Nó thường là một dòng mã duy nhất được đặt trong dấu ngoặc vuông.an easy to read, compact, and elegant way of creating a list from any existing iterable object. Basically, it's a simpler way to create a new list from the values in a list you already have. It is generally a single line of code enclosed in square brackets.

Tại sao chúng ta sử dụng danh sách hiểu trong Python?

Một lợi ích chính của việc sử dụng danh sách hiểu trong Python là đó là một công cụ duy nhất mà bạn có thể sử dụng trong nhiều tình huống khác nhau.Ngoài việc tạo danh sách tiêu chuẩn, việc hiểu danh sách cũng có thể được sử dụng để lập bản đồ và lọc.Bạn không phải sử dụng một cách tiếp cận khác nhau cho mỗi kịch bản.it's a single tool that you can use in many different situations. In addition to standard list creation, list comprehensions can also be used for mapping and filtering. You don't have to use a different approach for each scenario.

Sự khác biệt giữa danh sách và danh sách hiểu là gì?

Vòng lặp là một cách phổ biến để lặp lại thông qua một danh sách.Danh sách hiểu, mặt khác, là một cách hiệu quả hơn để lặp lại thông qua danh sách vì nó đòi hỏi ít dòng mã hơn.Danh sách hiểu biết đòi hỏi ít sức mạnh tính toán hơn so với vòng lặp vì nó chiếm ít không gian và mã hơn.List comprehension, on the other hand, is a more efficient way to iterate through a list because it requires fewer lines of code. List comprehension requires less computation power than a for loop because it takes up less space and code.