Hướng dẫn questions on list comprehension in python - câu hỏi về hiểu danh sách trong python

Hướng dẫn questions on list comprehension in python - câu hỏi về hiểu danh sách trong python

Làm thế nào một người mới Python có thể nổi bật trong một biển cạnh tranh? Hiển thị danh sách hiểu biết của bạn

Là một kỹ sư đảm bảo chất lượng phần mềm, tôi sử dụng Python làm một công cụ trong rương công cụ tự động hóa thử nghiệm của mình. Hiểu danh sách là một trong những kỹ thuật Python không chỉ thêm sự tinh tế vào mã của bạn, mà còn tiết kiệm các chu kỳ CPU và được coi là ’pythonic.

Danh sách hiểu biết là gì?

Cú pháp hiểu danh sách có phần của một vòng lặp được nén cho vòng lặp.

Cổ điển ‘cho vòng lặp

Đưa ra một danh sách các số, xóa tất cả các số lẻ khỏi danh sách:

numbers = [3,5,45,97,32,22,10,19,39,43]
result = []
for number in numbers:
  if number % 2 == 0:
    result.append(number)
print(result)

Cách hiểu danh sách

result = [number for number in numbers if number % 2 == 0]
print(result)

Thật vinh quang, thật xinh đẹp, rất pythonic;)

Liệt kê cú pháp hiểu biết

Phần khó nhất của danh sách học tập hiểu đối với tôi là thực sự hiểu cú pháp. Phương pháp tốt nhất để giải thích IMO là từ Hướng dẫn - Danh sách Python Hiểu với các ví dụ

Một truyền thống cho vòng lặp:

Hướng dẫn questions on list comprehension in python - câu hỏi về hiểu danh sách trong python

Dịch sang danh sách hiểu:

Hướng dẫn questions on list comprehension in python - câu hỏi về hiểu danh sách trong python

Và một hình ảnh tuyệt vời khác

Hướng dẫn questions on list comprehension in python - câu hỏi về hiểu danh sách trong python

Ví dụ

Đưa ra một danh sách các số, xóa phao (số có số thập phân)

original_list = [2,3.75,.04,59.354,6,7.7777,8,9]
only_ints = [number for number in original_list if type(number) == int]
print(only_ints)

Thực tiễn

Tôi cần thực hành, vì vậy tôi đã sử dụng danh sách này. Mỗi thử thách dưới đây liên kết đến một GIST giải pháp.

  • Tìm tất cả các số từ 1-1000 chia hết cho 7
  • Tìm tất cả các số từ 1-1000 có 3 trong đó
  • Đếm số lượng khoảng trống trong một chuỗi
  • Tạo một danh sách tất cả các phụ âm trong chuỗi Yak Yak Yak như la hét và ngáp và vào ngày hôm qua, họ đã ăn trong khi ăn Yuky Yams,
  • Nhận chỉ mục và giá trị như một bộ xử lý cho các mục trong danh sách Hi Hi, 4, 8,99, ‘Apple, (‘ T, B,, N N N). Kết quả sẽ giống như (chỉ mục, giá trị), (chỉ mục, giá trị)
  • Tìm các số phổ biến trong hai danh sách (mà không sử dụng tuple hoặc set) list_a = 1, 2, 3, 4, list_b = 2, 3, 4, 5, 5
  • Chỉ nhận được những con số trong một câu như năm 1984, có 13 trường hợp phản đối với hơn 1000 người tham dự
  • Đã cho các số = phạm vi (20), tạo một danh sách chứa từ ‘chẵn nếu một số trong các số là chẵn và từ’ lẻ nếu số này là lẻ. Kết quả sẽ trông giống như ’lẻ, thì lẻ,’ thậm chí là
  • Tạo một danh sách các bộ dữ liệu chỉ bao gồm các số khớp trong các danh sách này list_a = 1, 2, 3,4,5,6,7,8,9, list_b = 2, 7, 1, 12. Kết quả sẽ giống như (4 , 4), (12,12)
  • Tìm tất cả các từ trong một chuỗi ít hơn 4 chữ cái
  • Sử dụng danh sách lồng nhau để tìm hiểu tất cả các số từ 1-1000 chia hết cho bất kỳ chữ số nào bên cạnh 1 (2-9)
  • LinkedIn
  • GitHub
  • Twitter @BruceBookman
  • Blog
  • Vừa phải
  • Codementor.io
  • Hacker indie
  • Dev.to
  • Reddit
  • YouTube
  • Quora

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ừ

original_list = [2,3.75,.04,59.354,6,7.7777,8,9]
only_ints = [number for number in original_list if type(number) == int]
print(only_ints)
0 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

h_letters = []

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

print(h_letters)

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

['h', 'u', 'm', 'a', 'n']

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

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

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

['h', 'u', 'm', 'a', 'n']

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.

[expression for item in list]

Hướng dẫn questions on list comprehension in python - câu hỏi về hiểu danh sách 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

original_list = [2,3.75,.04,59.354,6,7.7777,8,9]
only_ints = [number for number in original_list if type(number) == int]
print(only_ints)
1 để 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,

original_list = [2,3.75,.04,59.354,6,7.7777,8,9]
only_ints = [number for number in original_list if type(number) == int]
print(only_ints)
0 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.

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

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

['h','u','m','a','n']

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.

result = [number for number in numbers if number % 2 == 0]
print(result)
0

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

result = [number for number in numbers if number % 2 == 0]
print(result)
1

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

result = [number for number in numbers if number % 2 == 0]
print(result)
2

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

result = [number for number in numbers if number % 2 == 0]
print(result)
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 ().

  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

result = [number for number in numbers if number % 2 == 0]
print(result)
4

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

result = [number for number in numbers if number % 2 == 0]
print(result)
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 ().


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.

result = [number for number in numbers if number % 2 == 0]
print(result)
6

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

result = [number for number in numbers if number % 2 == 0]
print(result)
7

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

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

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

result = [number for number in numbers if number % 2 == 0]
print(result)
8

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

result = [number for number in numbers if number % 2 == 0]
print(result)
9

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 The nested loops in list comprehension don’t work like normal nested loops. In the above program,

original_list = [2,3.75,.04,59.354,6,7.7777,8,9]
only_ints = [number for number in original_list if type(number) == int]
print(only_ints)
7 is executed before
original_list = [2,3.75,.04,59.354,6,7.7777,8,9]
only_ints = [number for number in original_list if type(number) == int]
print(only_ints)
8. Hence at first, a value is assigned to i then item directed by
original_list = [2,3.75,.04,59.354,6,7.7777,8,9]
only_ints = [number for number in original_list if type(number) == int]
print(only_ints)
9 is appended in the transpose variable.


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
  • Ở đây, danh sách kiểm tra hiểu biết:
  • Y có phải chia cho 2 hay không?

Làm thế nào để bạn giải quyết danh sách hiểu trong Python?

Viết lại các vòng lặp và bản đồ () gọi như một danh sách hiểu trong Python ...
Khởi tạo một danh sách trống ..
Vòng lặp trên một phần tử hoặc một loạt các yếu tố ..
Nối từng phần tử vào cuối danh sách ..

Danh sách hiểu trong Python với ví dụ là gì?

Danh sách Hiểu biết cung cấp một cú pháp ngắn hơn khi bạn muốn 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ó.Ví dụ: Dựa trên danh sách các loại trái cây, bạn muốn có một danh sách mới, chỉ chứa các loại trái cây có chữ "A" trong tên.offers a shorter syntax when you want to create a new list based on the values of an existing list. Example: Based on a list of fruits, you want a new list, containing only the fruits with the letter "a" in the name.

Danh sách hiểu biết nhanh hơn hoặc cho vòng lặp nhanh hơn?

Danh sách toàn diện nhanh hơn các vòng lặp để tạo danh sách.Nhưng, điều này là do chúng tôi đang tạo một danh sách bằng cách nối thêm các yếu tố mới vào mỗi lần lặp. to create lists. But, this is because we are creating a list by appending new elements to it at each iteration.

Danh sách hiểu biết nhanh hơn hoặc Lambda là gì?

Biểu diễn đồ họa của Danh sách Hiểu so với Lambda + Filter.Như chúng ta có thể thấy từ biểu đồ rằng danh sách tổng thể hiểu nhanh hơn nhiều so với hàm bộ lọc.Bộ lọc chỉ nhanh hơn cho một danh sách nhỏ.list comprehension is much faster than the filter function. The filter is faster for a small list only.