Sử dụng vòng lặp for, làm cách nào để truy cập chỉ mục vòng lặp, từ 1 đến 5 trong trường hợp này?
Sử dụng enumerate
để lấy chỉ mục với phần tử khi bạn lặp:
for index, item in enumerate(items):
print(index, item)
Và lưu ý rằng các chỉ mục của Python bắt đầu từ 0, vì vậy bạn sẽ nhận được 0 đến 4 với các chỉ số trên. Nếu bạn muốn đếm, 1 đến 5, hãy làm điều này:
for count, item in enumerate(items, start=1):
print(count, item)
Dòng điều khiển không độc
Những gì bạn đang yêu cầu là tương đương với Pythonic, đây là thuật toán mà hầu hết các lập trình viên của các ngôn ngữ cấp thấp hơn sẽ sử dụng:
index = 0 # Python's indexing starts at zero
for item in items: # Python's for loops are a "for each" loop
print(index, item)
index += 1
Hoặc trong các ngôn ngữ không có vòng lặp for-every:
index = 0
while index < len(items):
print(index, items[index])
index += 1
hoặc đôi khi phổ biến hơn (nhưng không phổ biến) được tìm thấy trong Python:
for index in range(len(items)):
print(index, items[index])
Sử dụng hàm liệt kê
enumerate
Hàm của Python làm giảm sự lộn xộn thị giác bằng cách ẩn kế toán cho các chỉ mục và đóng gói iterable vào một iterable khác (một enumerate
đối tượng) mang lại một tuple hai mục của chỉ mục và mục mà lần lặp ban đầu sẽ cung cấp. Trông như thế này:
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
Mẫu mã này là khá đầy đủ các kinh điển ví dụ hình về sự khác biệt giữa mã là thành ngữ của Python và mã không phải là mã. Mã thành ngữ là Python tinh vi (nhưng không phức tạp), được viết theo cách mà nó được dự định sử dụng. Mã thành ngữ được các nhà thiết kế ngôn ngữ mong đợi, điều đó có nghĩa là thông thường mã này không chỉ dễ đọc hơn mà còn hiệu quả hơn.
Đếm
Ngay cả khi bạn không cần chỉ mục khi bạn đi, nhưng bạn cần một số lần lặp (đôi khi mong muốn) bạn có thể bắt đầu 1
và số cuối cùng sẽ là số của bạn.
for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))
Số lượng dường như nhiều hơn những gì bạn định yêu cầu (trái ngược với chỉ số) khi bạn nói bạn muốn từ 1 đến 5.
Phá vỡ nó - một lời giải thích từng bước
Để phá vỡ các ví dụ này, giả sử chúng tôi có một danh sách các mục mà chúng tôi muốn lặp lại với một chỉ mục:
items = ['a', 'b', 'c', 'd', 'e']
Bây giờ chúng ta chuyển cái lặp này để liệt kê, tạo ra một đối tượng liệt kê:
enumerate_object = enumerate(items) # the enumerate object
Chúng ta có thể kéo mục đầu tiên ra khỏi vòng lặp này mà chúng ta sẽ nhận được trong một vòng lặp với next
chức năng:
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
Và chúng ta thấy chúng ta nhận được một tuple 0
, chỉ mục đầu tiên và 'a'
, mục đầu tiên:
(0, 'a')
chúng ta có thể sử dụng cái được gọi là " giải nén chuỗi " để trích xuất các phần tử từ bộ hai này:
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
và khi chúng tôi kiểm tra index
, chúng tôi thấy nó đề cập đến chỉ số đầu tiên, 0 và item
đề cập đến mục đầu tiên , 'a'
.
>>> print(index)
0
>>> print(item)
a
Phần kết luận
- Các chỉ mục Python bắt đầu từ 0
- Để có được các chỉ mục này từ một lần lặp khi bạn lặp lại nó, hãy sử dụng hàm liệt kê
- Sử dụng phép liệt kê theo cách thành ngữ (cùng với bộ giải nén tuple) tạo ra mã dễ đọc và dễ bảo trì hơn:
Vì vậy, làm điều này:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)