Computer >> Máy Tính >  >> Lập trình >> Python

Hiểu danh sách Python?

Python cung cấp cú pháp nhỏ gọn để lấy một danh sách từ một danh sách khác. Các biểu thức này được gọi là khả năng hiểu danh sách, hiểu danh sách là một trong những công cụ mạnh mẽ nhất trong Python. Khả năng hiểu danh sách của Python là một ví dụ về sự hỗ trợ của ngôn ngữ đối với các khái niệm lập trình hàm.

Hiểu danh sách Python là một cách rất dễ dàng để áp dụng một hàm hoặc bộ lọc cho danh sách các mục. Danh sách dễ hiểu có thể rất hữu ích nếu được sử dụng đúng cách nhưng rất khó đọc nếu bạn không cẩn thận.

Cú pháp

Cú pháp chung của cách hiểu danh sách là -

[expr for element in iterable if condition]

Trên tương đương với -

for element in iterable:
   if condition:
      expr

Ví dụ:giả sử bạn muốn tính bình phương của mỗi số trong danh sách. Bạn có thể làm điều này bằng cách cung cấp biểu thức cho phép tính của mình và chuỗi đầu vào để lặp lại.

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> squares = [x**2 for x in lst]
>>> print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Toàn bộ danh sách so với Vòng lặp

#USING FOR LOOP
evens = []
for i in range(10):
   if i % 2 == 0:
      evens. append(i)
print(evens)

Đầu ra

[0, 2, 4, 6, 8]

Một cách tốt hơn và nhanh hơn để viết đoạn mã trên là thông qua tính năng hiểu danh sách.

>>> [i for i in range(10) if i % 2 ==0]
[0, 2, 4, 6, 8]

Như chúng ta có thể thấy, việc viết mã bằng cách sử dụng tính năng hiểu danh sách hiệu quả hơn rất nhiều, nó ngắn hơn và bao gồm ít phần tử hơn.

Khả năng hiểu danh sách so với hàm lambda

Trừ khi bạn đang áp dụng một hàm đối số duy nhất, khả năng hiểu danh sách rõ ràng hơn so với hàm tích hợp sẵn trên bản đồ cho các trường hợp đơn giản. bản đồ yêu cầu tạo một hàm lambda để tính toán, hàm này gây nhiễu trực quan.

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(map(lambda x: x**2, lst))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Không giống như bản đồ, tính năng hiểu danh sách cho phép bạn dễ dàng lọc các mục từ danh sách đầu vào, loại bỏ các đầu ra tương ứng khỏi kết quả.

Liệt kê các nội dung hiểu với biểu thức điều kiện

Ví dụ:giả sử bạn chỉ muốn tính các số nhỏ hơn 100, chia hết cho 2 và 5 cả hai.

>>> lst = [x for x in range(100) if x % 2 == 0 if x % 5 == 0]
>>> print(lst)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

Lấy một ví dụ khác, trong đó bạn chỉ muốn tính bình phương của các số chia hết cho 2. Ở đây, tôi thực hiện việc này bằng cách thêm biểu thức điều kiện vào danh sách sau vòng lặp -

>>> lst=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> even_squares = [x**2 for x in lst if x % 2 == 0]
>>> print(even_squares)
[4, 16, 36, 64, 100]

Tính các số chẵn từ 1 đến 100.

>>> # a list of even numbers between 1 and 100
evens = [i for i in range(1,100) if not i % 2]
>>> print(evens)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]

Khả năng hiểu danh sách nhanh hơn nhiều so với vòng lặp for khi lặp qua một số lượng lớn các mục. Nếu chỉ khả năng đọc không phải là lý do thuyết phục để sử dụng chúng nhiều nhất có thể, thì tốc độ phải là.