Vòng lặp với biến đếm/chỉ số - một tác phẩm kinh điển trong Khoa học Máy tính. Thông thường, bạn sẽ xác định rõ ràng một biến/chỉ mục bộ đếm và tăng nó theo cách thủ công trên mỗi vòng lặp hoặc bạn sẽ sử dụng một số loại đường cú pháp để tránh quá trình này thông qua các vòng lặp for
nâng cao
Cả hai đoạn này đều dẫn đến cùng một đầu ra
Element Index: 0, Element: Looping
Element Index: 1, Element: with
Element Index: 2, Element: counters
Element Index: 3, Element: is
Element Index: 4, Element: a
Element Index: 5, Element: classic!
Do mức độ phổ biến của vòng lặp như thế này trong công việc hàng ngày - hàm enumerate[]
đã được tích hợp vào không gian tên Python. Bạn có thể, không có bất kỳ phụ thuộc bổ sung nào, lặp qua một lần lặp trong Python, với biến/chỉ mục bộ đếm tự động với cú pháp đơn giản như
for idx, element in enumerate[some_list]:
print[idx, element]
Ghi chú. Thông thường, nhưng không cần thiết, quy ước đặt tên chỉ mục là idx
nếu không có nhãn nào khác được áp dụng, vì
for idx, element in enumerate[some_list]:
print[idx, element]
0 là một từ khóa dành riêng. Thông thường, dựa trên khả năng lặp lại mà bạn đang làm việc, có thể gán các tên có ý nghĩa hơn, chẳng hạn như. for idx, element in enumerate[some_list]:
print[idx, element]
1Đoạn mã này dẫn đến
0 Looping
1 with
2 counters
3 is
4 a
5 classic!
Hãy đi sâu vào chức năng và khám phá cách thức hoạt động của nó. Đó là một cách cổ điển và phổ biến - và theo kiểu Python thực sự, nó đơn giản hóa một thao tác phổ biến, dư thừa và cải thiện khả năng đọc mã của bạn
Hàm enumerate[] trong Python
Hàm enumerate[]
chấp nhận một bộ sưu tập có thể lặp lại [chẳng hạn như bộ, danh sách hoặc chuỗi] và trả về một đối tượng
for idx, element in enumerate[some_list]:
print[idx, element]
3, bao gồm một bộ khóa và bộ giá trị, trong đó các khóa tương ứng với một biến bộ đếm [bắt đầu từ 0] và Ghi chú. Đối tượng
for idx, element in enumerate[some_list]:
print[idx, element]
3, chính nó, có thể lặp lại. Bạn có thể sử dụng cú pháp for
tiêu chuẩn, giải nén các khóa và giá trị của đối tượng for idx, element in enumerate[some_list]:
print[idx, element]
3Sử dụng cú pháp for
tiêu chuẩn của Python, chúng ta có thể giải nén các khóa và giá trị từ đối tượng này và kiểm tra các loại của chúng
Các loại dữ liệu của các giá trị [các thành phần từ bộ sưu tập ban đầu] được giữ lại, vì vậy ngay cả khi bạn chuyển các loại dữ liệu tùy chỉnh, miễn là chúng là một bộ sưu tập có thể lặp lại hợp lệ - chúng sẽ chỉ được chú thích bằng một biến bộ đếm. Nếu bạn thu thập đối tượng vào một danh sách, cấu trúc của nó sẽ trở nên rất rõ ràng
Nó chỉ là một tập hợp các bộ dữ liệu với mỗi bộ có hai phần tử - một biến đếm, bắt đầu từ 0 và mỗi phần tử của bộ lặp ban đầu được ánh xạ tới các chỉ số
Bạn có thể đặt một đối số
for idx, element in enumerate[some_list]:
print[idx, element]
8 tùy chọn, biểu thị không phải chỉ mục bắt đầu trong lần lặp, mà biểu thị giá trị bắt đầu cho bộ đếm/chỉ mục đầu tiên mà hàm sẽ tạo. Chẳng hạn, giả sử chúng tôi muốn bắt đầu từ for idx, element in enumerate[some_list]:
print[idx, element]
9 thay vì 0 Looping
1 with
2 counters
3 is
4 a
5 classic!
0Lặp qua Iterable với enumerate[]
Đã nói tất cả những điều đó - việc lặp qua một đối tượng
for idx, element in enumerate[some_list]:
print[idx, element]
3 trông giống như việc lặp qua các lần lặp khác. Vòng lặp for
có ích ở đây vì bạn có thể gán các biến tham chiếu cho các giá trị bộ dữ liệu được trả về. Ngoài ra, không cần tham chiếu đối tượng một cách rõ ràng, vì nó rất hiếm khi được sử dụng bên ngoài một vòng lặp nên giá trị trả về thường được sử dụng trực tiếp trong chính vòng lặp đóKết quả này trong
Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó
0, Looping
1, with
2, counters
3, is
4, a
5, classic!
Nếu bạn muốn đọc thêm về chuỗi f và định dạng đầu ra trong Python, hãy đọc Hướng dẫn định dạng chuỗi bằng chuỗi f của Python 3 của chúng tôi
Chú thích từng phần tử trong một lần lặp - hay đúng hơn là tăng bộ đếm và trả về nó, trong khi truy cập các phần tử của lần lặp cũng dễ dàng như vậy
Điều đáng chú ý là không có gì đặc biệt thực sự xảy ra trong hàm enumerate[]
. Nó thực sự tương đương về mặt chức năng với vòng lặp ban đầu mà chúng ta đã viết, với một biến đếm rõ ràng được trả về cùng với một phần tử. Nếu bạn xem ghi chú trong tệp , kết quả của hàm có chức năng tương đương với
def enumerate[sequence, start=0]:
n = start
for elem in sequence:
yield n, elem
n += 1
Bạn có thể thấy rằng mã khá giống với cách triển khai đầu tiên mà chúng tôi đã xác định
Điểm mấu chốt ở đây là - từ khóa
0 Looping
1 with
2 counters
3 is
4 a
5 classic!
4 định nghĩa một trình tạo, có thể lặp lại. Bằng cách trả lại chỉ mục và chính phần tử đó, chúng ta đang tạo một đối tượng trình tạo có thể lặp lại, sau đó chúng ta có thể lặp lại và trích xuất các phần tử [và chỉ số của chúng] từ vòng lặp for
Nếu bạn muốn đọc thêm về cách sử dụng từ khóa
4 tại đây, hãy đọc Hướng dẫn của chúng tôi để hiểu về từ khóa "yield" của Python0 Looping 1 with 2 counters 3 is 4 a 5 classic!
Nếu bạn sử dụng hàm
0 Looping
1 with
2 counters
3 is
4 a
5 classic!
7 thay vì hàm tích hợp sẵn, chúng ta sẽ có nhiều kết quả tương tựsome_list = ['Looping', 'with', 'counters', 'is', 'a', 'classic!']
for idx, element in our_enumerate[some_list]:
print[f'{idx}, {element}']
obj = our_enumerate[some_list]
print[f'Object type: {obj}']
Kết quả này trong
0, Looping
1, with
2, counters
3, is
4, a
5, classic!
Object type:
Sự khác biệt duy nhất là chúng ta chỉ có một đối tượng trình tạo chung, thay vì một tên lớp đẹp hơn
Phần kết luận
Cuối cùng, hàm enumerate[]
chỉ đơn giản là đường cú pháp, bao hàm một cách thực hiện vòng lặp cực kỳ phổ biến và đơn giản
Trong hướng dẫn ngắn này, chúng ta đã xem xét hàm enumerate[]
trong Python - phương thức tiện lợi được tích hợp sẵn để lặp lại một tập hợp và chú thích các phần tử bằng chỉ số