Python hỗ trợ duyệt ngược qua range() với bước nhảy âm. Hữu ích khi cần xử lý từ cuối về đầu mà không tạo list đảo ngược.
Cú pháp range() cho duyệt ngược
range(start, stop, step) # start: giá trị bắt đầu (bao gồm) # stop: giá trị kết thúc (KHÔNG bao gồm) # step: bước nhảy (âm để đi ngược)
Ví dụ 1: Đếm ngược từ 10 xuống 0
for i in range(10, -1, -1):
print(i)Kết quả
10 9 8 7 6 5 4 3 2 1 0
Giải thích: range(10, -1, -1) sinh ra 10, 9, ..., 0. Stop là -1 vì range không bao gồm giá trị stop.
Ví dụ 2: Duyệt ngược list/string
names = ['Hafeez', 'Aslan', 'Kareem']
for i in range(len(names) - 1, -1, -1):
print(names[i])Kết quả
Kareem Aslan Hafeez
Các cách khác duyệt ngược
| Cách | Mã nguồn | Đặc điểm |
|---|---|---|
| reversed() | for x in reversed(seq) | Pythonic, trả về iterator, không sửa gốc |
| Slice | for x in seq[::-1] | Tạo list mới đảo ngược, tốn bộ nhớ |
| range() | for i in range(len-1, -1, -1) | Kiểm soát index, hiệu năng tốt |
Khi nào dùng range ngược?
- Cần index để xóa phần tử trong list khi duyệt (tránh lỗi skip).
- Thuật toán DP, xử lý chuỗi từ cuối.
- Tối ưu bộ nhớ, không tạo bản sao.
Kết luận
range(start, -1, -1) là cách cơ bản và hiệu quả để duyệt ngược. Kết hợp với reversed() cho code sạch hơn khi không cần index.