Trong bài viết này, chúng ta sẽ nói về IndexError: list index out of range
lỗi trong Python.
Trong mỗi phần của bài viết, tôi sẽ nêu rõ nguyên nhân có thể gây ra lỗi và cách khắc phục.
bạn có thể nhận được IndexError: list index out of range
lỗi vì những lý do sau:
- Đang cố truy cập một chỉ mục không tồn tại trong danh sách.
- Sử dụng các chỉ mục không hợp lệ trong các vòng lặp của bạn.
- Chỉ định một phạm vi vượt quá các chỉ mục trong danh sách khi sử dụng
range()
chức năng.
Trước khi chúng tôi tiến hành sửa lỗi, hãy thảo luận về cách lập chỉ mục hoạt động trong danh sách Python. Bạn có thể bỏ qua phần tiếp theo nếu bạn đã biết cách lập chỉ mục hoạt động.
Lập chỉ mục hoạt động như thế nào trong danh sách Python?
Mỗi mục trong danh sách Python có thể được đánh giá bằng số chỉ mục của nó. Mục đầu tiên trong danh sách có chỉ số bằng không.
Hãy xem xét danh sách dưới đây:
languages = ['Python', 'JavaScript', 'Java']
print(languages[1])
# JavaScript
Trong ví dụ trên, chúng ta có một danh sách gọi là languages
. Danh sách này có ba mục — ‘Python’, ‘JavaScript’ và ‘Java’.
Để truy cập mục thứ hai, chúng tôi đã sử dụng chỉ mục của nó: languages[1]
. Cái này in ra JavaScript
.
Một số người mới bắt đầu có thể hiểu sai điều này. Họ có thể cho rằng vì chỉ số là 1 nên nó phải là mục đầu tiên.
Để dễ hiểu hơn, đây là bảng phân tích các mục trong danh sách theo chỉ mục của chúng:
Trăn (mục 1) => Chỉ số 0
JavaScript (mục 2) => Chỉ mục 1
Java (mục 3) => Chỉ số 2
Như bạn có thể thấy ở trên, mục đầu tiên có chỉ mục là 0 (vì Python là “không có chỉ mục”). Để truy cập các mục trong danh sách, bạn sử dụng chỉ mục của chúng.
Điều gì sẽ xảy ra nếu bạn cố gắng sử dụng một chỉ mục nằm ngoài phạm vi trong danh sách Python?
Nếu bạn cố gắng truy cập một mục trong danh sách bằng chỉ mục nằm ngoài phạm vi, bạn sẽ nhận được IndexError: list index out of range
lỗi.
Đây là một ví dụ:
languages = ['Python', 'JavaScript', 'Java']
print(languages[3])
# IndexError: list index out of range
Trong ví dụ trên, chúng tôi đã cố gắng truy cập mục thứ tư bằng cách sử dụng chỉ mục của nó: languages[3]
. chúng tôi đã nhận IndexError: list index out of range
lỗi vì danh sách không có mục thứ tư – nó chỉ có ba mục.
Cách khắc phục dễ dàng là luôn sử dụng chỉ mục tồn tại trong danh sách khi cố gắng truy cập các mục trong danh sách.
Cách khắc phục IndexError: list index out of range
Lỗi trong vòng lặp Python
Vòng lặp hoạt động với các điều kiện. Vì vậy, cho đến khi một điều kiện nhất định được đáp ứng, chúng sẽ tiếp tục chạy.
Trong ví dụ bên dưới, chúng tôi sẽ cố gắng in tất cả các mục trong danh sách bằng cách sử dụng while
vòng.
languages = ['Python', 'JavaScript', 'Java']
i = 0
while i <= len(languages):
print(languages[i])
i += 1
# IndexError: list index out of range
Đoạn mã trên trả về IndexError: list index out of range
lỗi. Hãy chia nhỏ mã để hiểu tại sao điều này xảy ra.
Đầu tiên, chúng tôi khởi tạo một biến i
và cho nó một giá trị là 0: i = 0
.
Sau đó chúng tôi đã đưa ra một điều kiện cho một while
vòng lặp (đây là nguyên nhân gây ra lỗi): while i <= len(languages)
.
Từ điều kiện đã cho, chúng ta đang nói, “vòng lặp này sẽ tiếp tục chạy miễn là i
Là ít hơn hoặc tương đương với các chiều dài sau đó language
danh sách”.
Các len()
hàm trả về độ dài của danh sách. Trong trường hợp của chúng tôi, 3 sẽ được trả lại. Vì vậy, điều kiện sẽ là thế này: while i <= 3
. Vòng lặp sẽ dừng khi i
bằng 3.
Hãy giả làm trình biên dịch Python. Đây là những gì xảy ra khi vòng lặp chạy.
Đây là danh sách: languages = ['Python', 'JavaScript', 'Java']
. Nó có ba chỉ mục — 0, 1 và 2.
Khi nào i
là 0 => Con trăn
Khi nào i
là 1 => JavaScript
Khi nào i
là 2 => Java
Khi nào i
là 3 => Không tìm thấy chỉ mục trong danh sách. IndexError: list index out of range
ném lỗi.
Vì vậy, lỗi được đưa ra khi i
bằng 3 vì không có mục nào có chỉ số là 3 trong danh sách.
Để khắc phục vấn đề này, chúng ta có thể sửa đổi điều kiện của vòng lặp bằng cách loại bỏ dấu bằng. Điều này sẽ dừng vòng lặp khi nó đến chỉ mục cuối cùng.
Đây là cách:
languages = ['Python', 'JavaScript', 'Java']
i = 0
while i < len(languages):
print(languages[i])
i += 1
# Python
# JavaScript
# Java
Điều kiện bây giờ trông như thế này: while i < 3
.
Vòng lặp sẽ dừng ở 2 vì điều kiện không cho phép nó bằng với giá trị được trả về bởi len()
chức năng.
Cách khắc phục IndexError: list index out of range
Lỗi khi sử dụng range()
Chức năng trong Python
Theo mặc định, các range()
trả về một “phạm vi” các số được chỉ định bắt đầu từ số không.
Đây là một ví dụ về range()
chức năng sử dụng:
for num in range(5):
print(num)
# 0
# 1
# 2
# 3
# 4
Như bạn có thể thấy trong ví dụ trên, range(5)
trả về 0, 1, 2, 3, 4.
Bạn có thể dùng range()
chức năng với một vòng lặp để in các mục trong danh sách.
Ví dụ đầu tiên sẽ hiển thị một khối mã ném IndexError: list index out of range
lỗi. Sau khi chỉ ra lý do xảy ra lỗi, chúng tôi sẽ khắc phục.
languages = ['Python', 'JavaScript', 'Java']
for language in range(4):
print(languages[language])
# Python
# JavaScript
# Java
# Traceback (most recent call last):
# File "<string>", line 5, in <module>
# IndexError: list index out of range
Ví dụ trên in tất cả các mục trong danh sách cùng với IndexError: list index out of range
lỗi.
Chúng tôi đã nhận lỗi vì range(4)
trả về 0, 1, 2, 3. Danh sách của chúng tôi không có chỉ mục nào có giá trị là 3.
Để khắc phục điều này, bạn có thể sửa đổi tham số trong range()
chức năng. Một giải pháp tốt hơn là sử dụng độ dài của danh sách làm range()
tham số của hàm.
Đó là:
languages = ['Python', 'JavaScript', 'Java']
for language in range(len(languages)):
print(languages[language])
# Python
# JavaScript
# Java
Đoạn mã trên chạy mà không có bất kỳ lỗi nào vì len()
hàm trả về 3. Sử dụng nó với range(3)
trả về 0, 1, 2 khớp với số mục trong danh sách.
Tóm lược
Trong bài viết này, chúng tôi đã nói về IndexError: list index out of range
lỗi trong Python.
Lỗi này thường xảy ra khi chúng tôi cố gắng truy cập một mục trong danh sách bằng cách sử dụng một chỉ mục không tồn tại trong danh sách.
Chúng ta đã xem một số ví dụ cho thấy chúng ta có thể gặp lỗi như thế nào khi làm việc với các vòng lặp, len()
chức năng, và range()
chức năng.
Chúng tôi cũng đã thấy cách khắc phục IndexError: list index out of range
lỗi cho từng trường hợp.
Chúc mừng mã hóa!