Khi cần duyệt list/tuple từ cuối về đầu, Python cung cấp nhiều cách.
Cách 1: range(len-1, -1, -1) - Cũ, rõ ràng
my_list = ['Mon', 'Tue', 'Wed', 'Thu']
for i in range(len(my_list) - 1, -1, -1):
print(my_list[i])
# Thu, Wed, Tue, Mon
Cách 2: Slicing [::-1] - Ngắn gọn, pythonic
my_list = ['Mon', 'Tue', 'Wed', 'Thu']
for item in my_list[::-1]:
print(item)
# Thu, Wed, Tue, Mon
Cách 3: reversed() - Hiệu năng tốt, không tạo bản sao
my_list = ['Mon', 'Tue', 'Wed', 'Thu']
for item in reversed(my_list):
print(item)
# Thu, Wed, Tue, Mon
So sánh hiệu năng
| Phương pháp | Tạo bản sao? | Độ phức tạp không gian | Khuyến nghị |
|---|---|---|---|
| range(len-1, -1, -1) | Không | O(1) | Cần index |
| list[::-1] | Có (list mới) | O(n) | List nhỏ, code ngắn |
| reversed(list) | Không (iterator) | O(1) | Tốt nhất chung |
Lưu ý
reversed()yêu cầu đối tượng có__len__và__getitem__(sequence) hoặc implements__reversed__.- Với iterator/generator chung, không dùng được
reversed()→ phải chuyển list trước.
Kết luận
Ưu tiên reversed(seq) cho duyệt ngược sequence. Dùng [::-1] khi cần list ngược để dùng lại nhiều lần.