Hiểu danh sách là một cấu trúc cú pháp tạo danh sách dựa trên danh sách hiện có. Khả năng hiểu danh sách cung cấp một cách ngắn gọn để tạo danh sách. Yêu cầu chung là tạo danh sách mới trong đó mỗi phần tử là kết quả của một số thao tác được áp dụng cho từng phần tử của một chuỗi khác hoặc có thể lặp lại hoặc để tạo một chuỗi con gồm các phần tử đó thỏa mãn một điều kiện nhất định
Sử dụng hiểu danh sách Python
Một cách hiểu danh sách có thể được sử dụng để
- chuyển đổi một danh sách
- lọc một danh sách
Cú pháp của việc hiểu danh sách bị ảnh hưởng bởi ký hiệu toán học của các tập hợp. Cú pháp Python được lấy cảm hứng từ ngôn ngữ lập trình Haskell
S = {x² : x in {0 .. 16}}
Đây là một ký hiệu toán học để tạo một tập hợp các giá trị số nguyên
L = [expression [if condition] for variable in sequence [if condition]]
Mã giả ở trên cho thấy cú pháp của việc hiểu danh sách. Nó bao gồm ba phần. vòng lặp for, điều kiện tùy chọn và biểu thức. Một vòng lặp for đi qua chuỗi. Đối với mỗi vòng lặp, một biểu thức được ước tính nếu điều kiện được đáp ứng. Nếu giá trị được tính toán, nó sẽ được thêm vào danh sách mới. Có thể có nhiều vòng lặp for và điều kiện if
Ví dụ sau chuyển đổi một danh sách thành một danh sách khác với sự trợ giúp của tính năng hiểu danh sách
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]
Trong ví dụ đầu tiên, chúng tôi tạo danh sách mới từ danh sách hiện có bằng cách nhân mỗi phần tử với 2
b = [e * 2 for e in a]
Mỗi phần tử của danh sách
b = [e * 2 for e in a]5 được nhân với 2 và kết quả được thêm vào danh sách
b = [e * 2 for e in a]6 mới
$ ./multiply_elements.py [2, 4, 6, 8, 10, 12]
Mỗi phần tử được nhân với hai
Tính nhiệt độ Fahrenheit từ Celsius
Chúng tôi có một danh sách nhiệt độ tính bằng độ C. Chúng tôi muốn tạo một danh sách nhiệt độ mới được biểu thị bằng nhiệt độ Fahrenheit
#!/usr/bin/python celsius = [22, 28, 33, 42, 52] fahr = [e * 9/5 + 32 for e in celsius] print[fahr]
Ví dụ tạo một danh sách nhiệt độ Fahrenheit mới được tính từ danh sách nhiệt độ Celsius
________số 8_______Việc tính toán được thực hiện trong phần thứ ba, phần biểu thức của phần hiểu danh sách Python
$ ./fahrenheit_celsius.py [71.6, 82.4, 91.4, 107.6, 125.6]
Trong ví dụ sau, chúng ta sẽ lọc một danh sách với khả năng hiểu danh sách
#!/usr/bin/python a = [-4, 2, 0, -1, 12, -3] b = [e for e in a if e > 0] print[b]
Chúng tôi có một danh sách các số nguyên. Chúng tôi tạo một danh sách mới trong đó chúng tôi chỉ bao gồm các số nguyên dương
Quảng cáob = [e for e in a if e > 0]
Để chỉ bao gồm các số dương, chúng tôi sử dụng điều kiện
b = [e * 2 for e in a]7, áp dụng cho từng phần tử;
L = [expression [if condition] for variable in sequence [if condition]]0
Ví dụ tiếp theo lọc các phần tử theo loại của chúng
L = [expression [if condition] for variable in sequence [if condition]]1
Chúng tôi có một danh sách các phần tử, đó là số nguyên và chuỗi. Chúng tôi tạo hai danh sách mới;
L = [expression [if condition] for variable in sequence [if condition]]2
Ở đây chúng tôi tạo một danh sách
b = [e * 2 for e in a]6, danh sách này sẽ chỉ chứa các giá trị số nguyên. Hàm
b = [e * 2 for e in a]9 được sử dụng để xác định loại phần tử
L = [expression [if condition] for variable in sequence [if condition]]3
Vị ngữ hiểu danh sách Python
Vị ngữ là một hàm trả về giá trị boolean. Nếu điều kiện quá phức tạp, chúng ta có thể đặt nó vào vị ngữ
L = [expression [if condition] for variable in sequence [if condition]]4
Ví dụ lọc ra tất cả các nguyên âm từ một câu
L = [expression [if condition] for variable in sequence [if condition]]5
Chức năng là một vị ngữ. Nó trả về True cho một ký tự nguyên âm
L = [expression [if condition] for variable in sequence [if condition]]6
Logic của điều kiện if được ủy quyền cho vị từ
$ ./multiply_elements.py [2, 4, 6, 8, 10, 12]0Quảng cáo
L = [expression [if condition] for variable in sequence [if condition]]7
Điều kiện
b = [e * 2 for e in a]7 cũng có thể được đặt ở phía trước. Bằng cách này, dữ liệu có thể được chuyển đổi
L = [expression [if condition] for variable in sequence [if condition]]8
Trong ví dụ này, chúng tôi chuyển đổi các giá trị thành các giá trị
$ ./multiply_elements.py [2, 4, 6, 8, 10, 12]2 và
$ ./multiply_elements.py [2, 4, 6, 8, 10, 12]3 bằng cách sử dụng khả năng hiểu danh sách
L = [expression [if condition] for variable in sequence [if condition]]9
Danh sách Python hiểu nhiều điều kiện nếu
Có thể sử dụng nhiều điều kiện if trong cách hiểu danh sách Python
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]0
Chúng tôi tạo một danh sách mới các số nguyên từ danh sách
b = [e * 2 for e in a]5, lớn hơn 10 và nhỏ hơn 20
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]1
Trong cách hiểu danh sách này, chúng tôi sử dụng hai điều kiện if
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]2
Nhiều vòng lặp hiểu danh sách Python
Có thể có nhiều vòng lặp for trong cách hiểu danh sách Python
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]3
Ví dụ tạo tích Descartes của hai danh sách
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]4
Hai vòng lặp for được sử dụng để tạo tích Descartes
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]5
Ví dụ tiếp theo cho thấy cách làm phẳng danh sách Python
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]6
Danh sách
$ ./multiply_elements.py [2, 4, 6, 8, 10, 12]5 là danh sách các danh sách lồng nhau. Chúng tôi làm phẳng danh sách bằng cách hiểu danh sách
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]7
Vòng lặp đầu tiên đi qua danh sách bên ngoài;
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]8
Biểu thức ban đầu trong cách hiểu danh sách Python có thể là một cách hiểu danh sách khác
Nested_list_comprehension. py
#!/usr/bin/python a = [1, 2, 3, 4, 5, 6] b = [e * 2 for e in a] print[b]9
Ví dụ xác định ma trận và khả năng hiểu danh sách tạo ma trận chuyển vị từ ma trận gốc
b = [e * 2 for e in a]0
Sàng Eratosthenes
Sàng của Eratosthenes là một thuật toán cổ xưa để tính toán các số nguyên tố. Số nguyên tố [hay số nguyên tố] là số tự nhiên lớn hơn 1 không có ước dương nào khác 1 và chính nó. Thuật toán đánh dấu lặp đi lặp lại là hợp số [i. e. , không phải số nguyên tố] bội của mỗi số nguyên tố, bắt đầu bằng bội của 2