Python cung cấp nhiều cách triển khai iterator. Dưới đây 5 loại từ cơ bản đến nâng cao.
Loại 1: While loop với độ dài biết trước (Ít dùng)
genre = ("Python","C","C++","Java")
i = 0
while i < len(genre):
print(genre[i])
i += 1
Nhược điểm: Cồng kềnh, dễ lỗi off-by-one, khó error handling.
Loại 2: For loop với range(len) (Thông dụng)
for i in range(len(genre)):
print(genre[i])
Ưu điểm: Có index, có thể step tùy ý. Nhược điểm: Không pythonic, chậm hơn iterator trực tiếp.
Loại 3: For loop trực tiếp trên iterable (Pythonic nhất)
for item in genre:
print(item)
Ưu điểm: Đơn giản, nhanh, tự động handle iterator protocol. Dùng cho list, tuple, dict, set, string, file...
Loại 4: enumerate() - Cần index và value
for idx, val in enumerate(genre):
print(f"{idx}: {val}")
Tham số: enumerate(iterable, start=0).
Loại 5: zip() - Duyệt song song nhiều iterable
genre = ("Python","C","C++","Java")
extras = ["C#","Dart","Erlang","Go"]
for g, e in zip(genre, extras):
print(f"{g} -> {e}")
Lưu ý: zip dừng ở iterable ngắn nhất. Dùng itertools.zip_longest nếu cần giữ dài hơn.
Bảng so sánh
| Phương pháp | Dùng khi | Hiệu năng | Pythonic |
|---|---|---|---|
| while + index | Logic phức tạp, điều kiện dừng tùy biến | Thấp | ⭐ |
| for i in range(len) | Cần index, sửa đổi container gốc | Trung bình | ⭐⭐ |
| for item in iterable | Chỉ cần value (90% trường hợp) | Cao | ⭐⭐⭐⭐⭐ |
| enumerate() | Cần index + value | Cao | ⭐⭐⭐⭐ |
| zip() | Duyệt song song 2+ iterable | Cao | ⭐⭐⭐⭐ |
Kết luận
Mặc định dùng for item in iterable. Cần index → enumerate(). Duyệt song song → zip(). Tránh range(len()) trừ khi bắt buộc.