Nhưng trong Python, thực tế có nhiều cách để đạt được cùng một mục tiêu. Tất nhiên, một số cách thanh lịch hơn những cách khác và trong hầu hết các trường hợp, rõ ràng cách nào tốt hơn
Chúng ta sẽ xem xét khả năng hiểu danh sách và cách chúng có thể thay thế vòng lặp for,
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8 và >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
9 để tạo chức năng mạnh mẽ trong một dòng mã PythonHiểu danh sách cơ bảnGiả sử tôi muốn tạo một danh sách các số từ 1 đến 10. tôi có thể làm
numbers = []
for i in range[1, 11]:
numbers.append[i]
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
và tôi sẽ nhận được
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Nhưng sử dụng khả năng hiểu danh sách, điều này có thể được thực hiện trong một dòng
>>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Đây là cú pháp cơ bản của việc hiểu danh sách.
>>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0. Ở đây, iterable là >>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1, phần tử là >>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2 và biểu thức là >>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2. Điều này tương đương với vòng lặp for mà chúng ta đã sử dụng trước đó. chúng tôi thêm >>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2 vào danh sách trong đó >>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2 là một số từ 1 đến 11bản đồ[]Hàm
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8 thường được sử dụng để áp dụng một hàm trên từng phần tử trong một iterable. Truyền vào một hàm và một lần lặp, và >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8 sẽ tạo một đối tượng chứa kết quả của việc truyền từng phần tử vào hàmVí dụ: giả sử tôi muốn tạo danh sách ô vuông từ danh sách
>>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8 mà chúng tôi đã tạo trước đó. chúng ta có thể làm>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
và chúng ta sẽ nhận được
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Hoặc chúng ta có thể sử dụng
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8 như vậy>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
7Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Ở đây, chúng tôi chuyển từng phần tử trong
>>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8 vào hàm lambda [đây chỉ là một cách dễ dàng để tạo hàm nếu bạn lười biếng]. Đầu ra của việc đặt từng số >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
41 vào hàm >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
42 sẽ là bình phương của số. Sử dụng >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
43, chúng tôi biến đối tượng bản đồ thành một danh sáchThay thế bản đồ [] Bằng cách hiểu danh sáchSử dụng hiểu danh sách, chúng ta có thể chỉ cần làm
numbers = []
for i in range[1, 11]:
numbers.append[i]
2Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Điều này sẽ chuyển từng số
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
44 vào biểu thức >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
45 và tạo một danh sách mới trong đó các phần tử chỉ đơn giản là bình phương của mỗi số trong >>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8lọc[]Hàm
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
9 được sử dụng để tạo một tập hợp con của một danh sách hiện có, dựa trên một điều kiện. Truyền vào một hàm và một lần lặp, và >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
9 sẽ tạo một đối tượng chứa tất cả các phần tử trong đó hàm đánh giá là >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
49Ví dụ: giả sử tôi muốn lấy danh sách tất cả các số lẻ và danh sách tất cả các số chẵn từ danh sách
>>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8 mà chúng ta đã tạo trước đó. chúng ta có thể làm>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
và chúng tôi sẽ nhận được
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Hoặc chúng ta có thể sử dụng
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
9 như vậy>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Tại đây, tất cả các số sẽ được chuyển vào hàm lambda và nếu
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
52 là >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
49 thì số đó sẽ được đưa vào >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
54. Tương tự như vậy, nếu >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
55 là >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
49, số đó sẽ được bao gồm trong >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
57Thay thế bộ lọc [] Bằng cách hiểu danh sáchSử dụng hiểu danh sách, chúng ta có thể chỉ cần làm
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Ở đây, chúng tôi đang sử dụng một điều kiện. Cú pháp cho điều này là
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
58. Điều này tương đương với vòng lặp for mà chúng ta đã sử dụng trước đó — nếu điều kiện >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
59 được đáp ứng, >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
44 sẽ được thêm vào >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
54 và >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
44 là một phần tử trong vòng lặp >>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8Hiểu lồng nhauGiả sử chúng ta muốn tạo một ma trận. Điều này sẽ liên quan đến việc tạo danh sách lồng nhau. Sử dụng vòng lặp for, chúng ta có thể làm như sau
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
và chúng tôi sẽ nhận được
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Sử dụng cách hiểu lồng nhau, chúng ta có thể chỉ cần làm
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Khả năng hiểu danh sách bên ngoài
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
74 tạo 5 hàng, trong khi khả năng hiểu danh sách bên trong >>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
75 tạo 5 cộtTừ điển hiểuBạn cũng có thể sử dụng cách hiểu từ điển. Ví dụ: nếu tôi muốn tạo một từ điển ánh xạ từng số trong
>>> numbers = [i for i in range[1, 11]]
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8 vào ô vuông tương ứng của chúng, chúng tôi có thể thực hiện>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
và chúng tôi sẽ nhận được
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Hoặc chúng ta có thể sử dụng cách hiểu từ điển
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
6Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bạn thậm chí có thể sử dụng cách hiểu từ điển trong cách hiểu danh sách hoặc ngược lại
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
7Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Tại sao sử dụng hiểu danh sách?- Mã sạch hơn, rõ ràng hơn
- Nhanh hơn một chút so với
8 và>>> numbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
9>>> numbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- Thường được coi là 'trăn' hơn
Nhưng này, vào cuối ngày, sự lựa chọn là của bạn. Khả năng hiểu danh sách chỉ là một cách khác để làm những việc tương tự và liệu thứ gì đó 'sạch hơn' và 'rõ ràng hơn' hay không phần lớn là chủ quan. Tuy nhiên, hầu hết mọi người sẽ đồng ý rằng hiểu danh sách là cách tiêu chuẩn hơn để thực hiện mọi việc