Hiểu danh sách Python (Có ví dụ)

Trong bài viết này, chúng ta sẽ tìm hiểu về cách hiểu danh sách Python và cách sử dụng nó.

Liệt kê toàn diện so với Vòng lặp trong Python

Giả sử, chúng ta muốn tách các chữ cái của từ humanvà thêm các chữ cái dưới dạng các mục của danh sách. Điều đầu tiên nghĩ đến là sử dụng vòng lặp for.

Ví dụ 1: Lặp lại một chuỗi bằng cách sử dụng vòng lặp for

 h_letters = () for letter in 'human': h_letters.append(letter) print(h_letters)

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

 ('Nhân loại')

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 tính năng hiểu danh sách. Hiểu danh sách 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 chương trình trên có thể được viết như thế nào bằng cách sử dụng cách hiểu danh sách.

Ví dụ 2: Lặp lại một chuỗi bằng cách sử dụng tính năng hiểu danh sách

 h_letters = ( letter for letter in 'human' ) print( h_letters)

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

 ('Nhân loại')

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 có thể lặp lại 'human'. Chúng tôi gọi print()hàm để nhận đầu ra.

Cú pháp tổng hợp danh sách

 (biểu thức cho mục trong danh sách)

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

Nếu bạn nhận thấy, humanlà một chuỗi, không phải danh sách. Đây là sức mạnh của khả năng hiểu 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 đó giống 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 danh sách. Nhưng khi bạn học và hiểu rõ 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.

Liệt kê toàn diện so với các hàm Lambda

Hiểu danh sách không phải là cách duy nhất để làm việc trên danh sách. Nhiều hàm tích hợp sẵn và các hàm lambda có thể tạo và sửa đổi danh sách với ít dòng mã hơn.

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

 letters = list(map(lambda x: x, 'human')) print(letters)

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

 ('Nhân loại')

Tuy nhiên, việc hiểu danh sách thường dễ đọc hơn so với các hàm lambda. Sẽ dễ hiểu hơn những gì lập trình viên đã cố gắng đạt được khi sử dụng tính năng hiểu danh sách.

Các điều kiện trong việc hiểu danh sách

Phần hiểu danh sách 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ộ giá trị 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 if với tính năng hiểu danh sách

 number_list = ( x for x in range(20) if x % 2 == 0) print(number_list)

Khi chúng ta chạy chương trình trên, kết quả đầu ra sẽ là:

 (0, 2, 4, 6, 8, 10, 12, 14, 16, 18)

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 mục đó chia hết cho 2.

Ví dụ 5: IF lồng nhau với khả năng hiểu danh sách

 num_list = (y for y in range(100) if y % 2 == 0 if y % 5 == 0) print(num_list)

Khi chúng ta chạy chương trình trên, kết quả đầu ra sẽ là:

 (0, 10, 20, 30, 40, 50, 60, 70, 80, 90)

Tại đây, liệt kê các kiểm tra khả năng hiểu:

  1. Y có chia hết cho 2 hay không?
  2. Y có chia hết cho 5 hay không?

Nếu y thỏa mãn cả hai điều kiện, y được thêm vào num_list.

Ví dụ 6: if… else With List Computing

 obj = ("Even" if i%2==0 else "Odd" for i in range(10)) print(obj)

Khi chúng ta chạy chương trình trên, kết quả đầu ra sẽ là:

 ('Chẵn', 'Lẻ', 'Chẵn', 'Lẻ', 'Chẵn', 'Lẻ', 'Chẵn', 'Lẻ', 'Chẵn', 'Lẻ')

Here, list comprehension will check the 10 numbers from 0 to 9. If i is divisible by 2, then Even is appended to the obj list. If not, Odd is appended.

Nested Loops in List Comprehension

Suppose, we need to compute the transpose of a matrix that requires nested for loop. Let’s see how it is done using normal for loop first.

Example 7: Transpose of Matrix using Nested Loops

 transposed = () matrix = ((1, 2, 3, 4), (4, 5, 6, 8)) for i in range(len(matrix(0))): transposed_row = () for row in matrix: transposed_row.append(row(i)) transposed.append(transposed_row) print(transposed)

Output

 ((1, 4), (2, 5), (3, 6), (4, 8)) 

The above code use two for loops to find transpose of the matrix.

We can also perform nested iteration inside a list comprehension. In this section, we will find transpose of a matrix using nested loop inside list comprehension.

Example 8: Transpose of a Matrix using List Comprehension

 matrix = ((1, 2), (3,4), (5,6), (7,8)) transpose = ((row(i) for row in matrix) for i in range(2)) print (transpose)

When we run the above program, the output will be:

 ((1, 3, 5, 7), (2, 4, 6, 8))

In above program, we have a variable matrix which have 4 rows and 2 columns.We need to find transpose of the matrix. For that, we used list comprehension.

**Note: The nested loops in list comprehension don’t work like normal nested loops. In the above program, for i in range(2) is executed before row(i) for row in matrix. Hence at first, a value is assigned to i then item directed by row(i) is appended in the transpose variable.

Key Points to Remember

  • List comprehension is an elegant way to define and create lists based on existing lists.
  • List comprehension is generally more compact and faster than normal functions and loops for creating list.
  • However, we should avoid writing very long list comprehensions in one line to ensure that code is user-friendly.
  • Hãy nhớ rằng, mọi phần hiểu danh sách đều có thể được viết lại trong vòng lặp for, nhưng mọi vòng lặp for không thể được viết lại ở dạng hiểu danh sách.

thú vị bài viết...