Trong bài viết này, bạn sẽ thấy một số lý do gây ra list index out of range
Lỗi trăn.
Bên cạnh việc biết tại sao lỗi này xảy ra ngay từ đầu, bạn cũng sẽ tìm hiểu một số cách để tránh nó.
Bắt đầu nào!
Cách tạo danh sách trong Python
Để tạo một đối tượng danh sách trong Python, bạn cần:
- Đặt tên cho danh sách,
- Sử dụng toán tử gán,
=
, - và bao gồm 0 hoặc nhiều mục danh sách bên trong dấu ngoặc vuông,
[]
. Mỗi mục danh sách cần được phân tách bằng dấu phẩy.
Ví dụ: để tạo một danh sách tên, bạn sẽ làm như sau:
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
Đoạn mã trên đã tạo một danh sách có tên names
có bốn giá trị: Kelly, Nelly, Jimmy, Lenny
.
Cách kiểm tra độ dài của danh sách trong Python
Để kiểm tra độ dài của danh sách trong Python, hãy sử dụng tích hợp sẵn của Python len()
phương pháp.
len()
sẽ trả về một số nguyên, đó sẽ là số mục được lưu trữ trong danh sách.
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
#create a variable called name_length to store the length of the list
name_length = len(names)
#print value of variable to the console
print(name_length)
#output
#4
Có bốn mục được lưu trữ trong danh sách, do đó độ dài của danh sách sẽ là bốn.
Cách truy cập các mục danh sách riêng lẻ trong Python
Mỗi mục trong một danh sách có riêng của mình số chỉ mục.
Việc lập chỉ mục trong Python và hầu hết các ngôn ngữ lập trình hiện đại đều bắt đầu từ 0.
Điều này có nghĩa là mục đầu tiên trong danh sách có chỉ số là 0, mục thứ hai có chỉ số là 1, v.v.
Bạn có thể sử dụng số chỉ mục để truy cập từng mục.
Để truy cập một mục trong danh sách bằng số chỉ mục của nó, trước tiên hãy viết tên của danh sách. Sau đó, bên trong dấu ngoặc vuông, bao gồm số nguyên tương ứng với số chỉ mục của mục.
Lấy ví dụ từ trước đó, đây là cách bạn sẽ truy cập từng mục trong danh sách bằng cách sử dụng số chỉ mục của nó:
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
names[0] # Kelly
names[1] # Nelly
names[2] # Jimmy
names[3] # Lenny
Bạn cũng có thể sử dụng lập chỉ mục phủ định để truy cập các mục bên trong danh sách bằng Python.
Để truy cập vào Cuối cùng mục, bạn sử dụng giá trị chỉ mục là -1. Để truy cập mục thứ hai đến mục cuối cùng, bạn sử dụng giá trị chỉ mục là -2.
Đây là cách bạn sẽ truy cập từng mục trong danh sách bằng cách sử dụng lập chỉ mục phủ định:
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
names[-4] # Kelly
names[-3]# Nelly
names[-2] # Jimmy
names[-1] # Lenny
Tại sao Indexerror: list index out of range
xảy ra lỗi trong Python?
Sử dụng một số chỉ mục nằm ngoài phạm vi của danh sách
bạn sẽ nhận được Indexerror: list index out of range
lỗi khi bạn thử và truy cập một mục bằng giá trị nằm ngoài phạm vi chỉ mục của danh sách và không tồn tại.
Điều này khá phổ biến khi bạn cố gắng truy cập mục cuối cùng của danh sách hoặc mục đầu tiên nếu bạn đang sử dụng lập chỉ mục phủ định.
Hãy quay trở lại danh sách chúng ta đã sử dụng cho đến nay.
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
Giả sử tôi muốn truy cập vào mục cuối cùng, “Lenny” và thử làm như vậy bằng cách sử dụng đoạn mã sau:
print(names[4])
#output
#Traceback (most recent call last):
# File "/Users/dionysialemonaki/python_articles/demo.py", line 3, in <module>
# print(names[4])
#IndexError: list index out of range
Nói chung, phạm vi chỉ số của một danh sách là 0 to n-1
với n
là tổng số giá trị trong danh sách.
Với tổng giá trị của danh sách trên là 4
phạm vi chỉ mục là 0 to 3
.
Bây giờ, hãy thử truy cập một mục bằng lập chỉ mục phủ định.
Giả sử tôi muốn truy cập mục đầu tiên trong danh sách, “Kelly”, bằng cách sử dụng lập chỉ mục phủ định.
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
print(names[-5])
#output
#Traceback (most recent call last):
# File "/Users/dionysialemonaki/python_articles/demo.py", line 3, in <module>
# print(names[-5])
#IndexError: list index out of range
Khi sử dụng lập chỉ mục phủ định, phạm vi chỉ mục của danh sách là -1 to -n
ở đâu -n
tổng số mục có trong danh sách.
Với tổng số mặt hàng trong danh sách là 4
phạm vi chỉ số là -1 to -4
.
Sử dụng sai giá trị trong range()
chức năng trong Python for
vòng
bạn sẽ nhận được Indexerror: list index out of range
lỗi khi lặp qua một danh sách và cố gắng truy cập một mục không tồn tại.
Một trường hợp phổ biến mà điều này có thể xảy ra là khi bạn sử dụng sai số nguyên trong Python range()
chức năng.
Các range()
hàm thường nhận một số nguyên, cho biết vị trí quá trình đếm sẽ dừng lại.
Ví dụ, range(5)
chỉ ra rằng việc đếm sẽ bắt đầu từ và kết thúc tại
4
.
Vì vậy, theo mặc định, việc đếm bắt đầu tại vị trí được tăng lên bởi
1
mỗi lần, và số lượng lên tới – nhưng không bao gồm – vị trí mà quá trình đếm sẽ dừng lại.
Hãy lấy ví dụ sau:
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
for name in range(5):
print(names[name])
#output
#Kelly
#Nelly
#Jimmy
#Lenny
#Traceback (most recent call last):
# File "/Users/dionysialemonaki/python_articles/demo.py", line 7, in <module>
# print(names[name])
#IndexError: list index out of range
Đây, danh sách names
có bốn giá trị.
Tôi muốn lặp qua danh sách và in ra từng giá trị.
Khi tôi sử dụng range(5)
Tôi đã yêu cầu trình thông dịch Python in các giá trị ở các vị trí 0 to 4
.
Tuy nhiên, không có mục nào ở vị trí 4.
Bạn có thể thấy điều này bằng cách in ra số vị trí đầu tiên và sau đó giá trị tại vị trí đó.
#0
#Kelly
#1
#Nelly
#2
#Jimmy
#3
#Lenny
#4
#Traceback (most recent call last):
# File "/Users/dionysialemonaki/python_articles/demo.py", line 8, in <module>
# print(names[name])
#IndexError: list index out of range
Bạn thấy rằng ở vị trí là “Kelly”, ở vị trí
1
là “Nelly”, ở vị trí 2
là “Jimmy” và ở vị trí 3
là “Lenny”.
Khi nói đến vị trí bốn, được chỉ định với range(5)
cho biết vị trí của 0 to 4
không có gì để in ra và do đó trình thông dịch đưa ra lỗi.
Một cách để khắc phục điều này là hạ thấp số nguyên trong range()
:
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
for name in range(4):
print(name)
print(names[name])
#output
#0
#Kelly
#1
#Nelly
#2
#Jimmy
#3
#Lenny
Một cách khác để khắc phục điều này khi sử dụng for
vòng lặp là chuyển độ dài của danh sách làm đối số cho range()
chức năng. Bạn làm điều này bằng cách sử dụng len()
chức năng Python tích hợp sẵn, như được hiển thị trong phần trước:
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
for name in range(len(names)):
print(names[name])
#output
#Kelly
#Nelly
#Jimmy
#Lenny
Khi đi qua len()
như một đối số để range()
chắc chắn rằng bạn đừng phạm sai lầm sau:
names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
for name in range(len(names) + 1):
print(names[name])
Sau khi chạy mã, bạn sẽ lại nhận được một IndexError: list index out of range
lỗi:
#Kelly
#Nelly
#Jimmy
#Lenny
#Traceback (most recent call last):
# File "/Users/dionysialemonaki/python_articles/demo.py", line 4, in <module>
# print(names[name])
#IndexError: list index out of range
Phần kết luận
Hy vọng rằng bài viết này đã cung cấp cho bạn một cái nhìn sâu sắc về lý do tại sao IndexError: list index out of range
lỗi xảy ra và một số cách bạn có thể tránh nó.
Nếu bạn muốn tìm hiểu thêm về Python, hãy xem Chứng chỉ Python của freeCodeCamp. Bạn sẽ bắt đầu học theo cách tương tác và thân thiện với người mới bắt đầu. Cuối cùng, bạn cũng sẽ xây dựng năm dự án để đưa vào thực tế và giúp củng cố những gì bạn đã học.
Cảm ơn đã đọc và mã hóa hạnh phúc!