Tuy nhiên, nếu bạn không quen với cú pháp hoặc muốn tìm ra các cách khác để truy cập chỉ mục trong vòng lặp for, vui lòng tham khảo
Trong hướng dẫn này, bạn học cách
- Sử dụng hàm enumerate[] để lấy chỉ số vòng lặp for
- Cách bắt đầu chỉ mục vòng lặp ở 1 hoặc một số giá trị khác 0
- Các cách khác để thực hiện vòng lặp for với chỉ mục, chẳng hạn như
- Cập nhật một biến chỉ số
- hiểu danh sách
- Hàm zip[]
- Hàm phạm vi []
Hàm liệt kê [] trong Python
Cách đơn giản nhất để truy cập chỉ mục của vòng lặp for trong Python là sử dụng hàm enumerate[] tích hợp sẵn
Trước khi xem một loạt các ví dụ, chúng ta hãy xem cách thức hoạt động của hàm enumerate[]
Hàm liệt kê [] hoạt động như thế nào
Hàm liệt kê [] có thể được gọi trên bất kỳ lần lặp nào trong Python
Sau đó, nó kết hợp từng phần tử trong iterable với một chỉ mục và trả về kết quả dưới dạng một đối tượng liệt kê
Để trực quan hóa đối tượng liệt kê, bạn có thể chuyển đổi nó thành danh sách bằng cách sử dụng hàm list[]
Ví dụ
names = ["Alice", "Bob", "Charlie"] names_idx = enumerate[names] print[list[names_idx]]
đầu ra
[[0, 'Alice'], [1, 'Bob'], [2, 'Charlie']]
Như bạn có thể thấy, các tên trong danh sách hiện nằm trong một bộ và với mỗi tên, có một chỉ mục liên quan
Dưới đây là một minh họa của quá trình liệt kê
Hàm liệt kê kết hợp từng phần tử với một chỉ mụcKhi bạn gọi enumerate[], việc lập chỉ mục bắt đầu từ 0 theo mặc định
Tuy nhiên, bạn có thể thay đổi điều này bằng cách chỉ định một tham số bắt đầu tùy chọn cho lệnh gọi hàm enumerate[]
Chẳng hạn, hãy lập chỉ mục bắt đầu từ 1
names = ["Alice", "Bob", "Charlie"] names_idx = enumerate[names, start=1] print[list[names_idx]]
đầu ra
[[1, 'Alice'], [2, 'Bob'], [3, 'Charlie']]
Bây giờ bạn đã hiểu cách thức hoạt động của hàm enumerate[], hãy sử dụng nó để truy cập chỉ mục trong vòng lặp for
Cách lấy chỉ mục trong vòng lặp For
Để lấy chỉ mục trong vòng lặp for
- Gọi hàm enumerate[] trên iterable.
- Truy cập chỉ mục, các cặp phần tử bằng cách sử dụng vòng lặp for…in
Ví dụ
names = ["Alice", "Bob", "Charlie"] names_idx = enumerate[names] for index, name in names_idx: print[f"{name}: {index}"]
đầu ra
Alice: 0 Bob: 1 Charlie: 2
Nếu bạn là người mới bắt đầu và gặp khó khăn trong việc hiểu phần index, name trong vòng lặp, vui lòng xem bài viết giải nén tuple
Nhân tiện, bạn không cần lưu trữ riêng biến lặp được liệt kê thành một biến riêng. Thay vào đó, bạn có thể gọi trực tiếp hàm enumerate[] khi bắt đầu vòng lặp for
Điều này giúp bạn tiết kiệm một dòng mã
Ví dụ
names = ["Alice", "Bob", "Charlie"] for index, name in enumerate[names]: print[f"{name}: {index}"]
đầu ra
Alice: 0 Bob: 1 Charlie: 2
Tiếp theo, chúng ta hãy xem cách thay đổi chỉ mục bắt đầu liệt kê
Cách bắt đầu lập chỉ mục ở giá trị tùy chỉnh
Trong ví dụ trước, việc lập chỉ mục bắt đầu từ 0
Tuy nhiên, điều khá phổ biến là bạn muốn lập chỉ mục bắt đầu từ một nơi khác ngoài 0
May mắn thay, hàm enumerate[] cho phép chỉ định một chỉ số bắt đầu khác không
Vòng lặp for có chỉ số khác 0
- Gọi hàm enumerate[] trên iterable và chỉ định start parameter.
- Truy cập chỉ mục, các cặp phần tử bằng cách sử dụng vòng lặp for…in
Ví dụ: hãy lập chỉ mục bắt đầu từ 1
Alice: 0 Bob: 1 Charlie: 20
đầu ra
Alice: 0 Bob: 1 Charlie: 21
Liệt kê hoạt động với tất cả các lần lặp
Cho đến nay, bạn mới chỉ thấy cách truy cập chỉ mục vòng lặp for khi xử lý các danh sách trong Python
Tuy nhiên, bạn có thể gọi hàm enumerate[] trên bất kỳ kiểu lặp nào trong Python, chẳng hạn như bộ hoặc chuỗi
Nhân tiện, nếu bạn không quen với iterables, vui lòng xem hướng dẫn đầy đủ này
Ví dụ: hãy lấy chỉ số của từng chữ cái trong một chuỗi
Alice: 0 Bob: 1 Charlie: 22
đầu ra
Alice: 0 Bob: 1 Charlie: 23
Bây giờ bạn đã hiểu cách sử dụng hàm enumerate[] để lấy chỉ số của vòng lặp for trong Python
Đây là một giải pháp tao nhã cho vấn đề. Tôi khuyên bạn nên gắn bó với nó
Tuy nhiên, để hoàn thiện, tôi sẽ chỉ ra các cách khác để lập chỉ mục cho các vòng lặp
Các cách thay thế cho vòng lặp với chỉ mục
Dưới đây là danh sách các cách khác để truy cập chỉ mục vòng lặp for trong Python
Biến chỉ mục riêng biệt
Cách cơ bản nhất để lấy chỉ mục của vòng lặp for là theo dõi biến chỉ mục
Điều này thường được dạy trong các khóa học lập trình cấp độ mới bắt đầu. Ngoài ra, một số ngôn ngữ lập trình thậm chí không có chức năng như enumerate[] mà bạn có thể sử dụng
Chẳng hạn, hãy in tên và vị trí của chúng trong danh sách
Alice: 0 Bob: 1 Charlie: 24
đầu ra
Alice: 0 Bob: 1 Charlie: 2
Nhược điểm của phương pháp này là bạn cần nhớ cập nhật biến chỉ mục bổ sung. Điều này giới thiệu mã không cần thiết và làm cho mã dễ bị lỗi và hành vi ngoài ý muốn
Bởi vì có một hàm enumerate[] riêng biệt dành để giải quyết vấn đề này, tốt hơn là sử dụng nó để thay thế
Hàm zip[]
Đưa ra một phần tử có thể lặp lại và một danh sách các chỉ số riêng biệt, bạn có thể ghép hai phần tử này lại với nhau bằng hàm zip[]
Ví dụ
Alice: 0 Bob: 1 Charlie: 26
đầu ra
Alice: 0 Bob: 1 Charlie: 2
Tuy nhiên, điều này thường không thực tế do thực tế là bạn nên chỉ định một chuỗi riêng cho các chỉ số
Nếu bạn không có danh sách chỉ mục riêng, tất nhiên bạn có thể tạo một danh sách bằng cách sử dụng hàm range[] và sau đó nén nó cùng với danh sách
Alice: 0 Bob: 1 Charlie: 28
đầu ra
Alice: 0 Bob: 1 Charlie: 2
Dù sao, làm điều này khá vô ích vì hàm enumerate[] tích hợp thực hiện chính xác điều này với ít mã hơn và dễ hiểu hơn
Hàm phạm vi []
Trong Python, bạn có thể sử dụng hàm range[] để tạo một dãy số từ điểm bắt đầu đến điểm kết thúc
Thật dễ dàng để lặp lại một phạm vi trong Python
Với độ dài của một lần lặp, bạn có thể tạo một loạt các chỉ mục bằng cách sử dụng hàm range[]. Sau đó, bạn có thể sử dụng các chỉ số này để truy cập các phần tử của iterable trong vòng lặp for
Ví dụ
names = ["Alice", "Bob", "Charlie"] names_idx = enumerate[names] print[list[names_idx]]0
đầu ra
Alice: 0 Bob: 1 Charlie: 2
Danh sách hiểu
Cuối cùng nhưng không kém phần quan trọng, bạn có thể đã nghe nói về khả năng hiểu danh sách trong Python
Khả năng hiểu danh sách cung cấp cách viết tắt một dòng để sử dụng vòng lặp for. Sử dụng hiểu danh sách không bao giờ là bắt buộc. Đôi khi có thể thuận tiện để chuyển đổi một vòng lặp for cơ bản thành một cách hiểu danh sách một lớp ngắn
Dù sao, bạn có thể sử dụng khả năng hiểu danh sách khi muốn truy cập chỉ mục của vòng lặp for
Chẳng hạn, hãy kết hợp khả năng hiểu danh sách và hàm enumerate[] để tạo một vòng lặp rút gọn với chỉ mục
names = ["Alice", "Bob", "Charlie"] names_idx = enumerate[names] print[list[names_idx]]2
đầu ra
Alice: 0 Bob: 1 Charlie: 2
Mặc dù biểu thức này giúp bạn tiết kiệm một dòng mã, nhưng người ta có thể tranh luận rằng nó trông gọn gàng hơn khi được sử dụng như một vòng lặp for thông thường
Hãy thận trọng để không hy sinh chất lượng mã với khả năng hiểu
Phần kết luận
Hôm nay bạn đã học cách truy cập chỉ mục trong vòng lặp for trong Python
Tóm lại, có một hàm enumerate[] tích hợp có thể được gọi trên bất kỳ iterable nào. Nó kết hợp các phần tử với một chỉ mục mà bạn có thể sử dụng khi lặp qua nó
Ngoài việc sử dụng hàm enumerate[], còn có rất nhiều tùy chọn [thường tệ hơn] để lặp với chỉ mục