Lỗi “Danh sách chỉ mục ngoài phạm vi” trong Python có nghĩa là gì?
Vì vậy, bạn đang làm việc với một danh sách hoặc mảng trong Python và có thể đã cố gắng cắt nó. Nhưng thay vì kết quả mong đợi, bạn lại gặp lỗi “liệt kê chỉ mục nằm ngoài phạm vi.” Đừng lo lắng, nó có thể xảy ra với bất kỳ ai.
Hãy cùng khám phá ý nghĩa của lỗi này, nguyên nhân và cách loại bỏ lỗi này mà không cần thêm bất kỳ lỗi nào.
Mục Lục
Lỗi “danh sách chỉ mục ngoài phạm vi” có nghĩa là gì trong Python?
Khi Python ném ra lỗi “chỉ mục danh sách nằm ngoài phạm vi”, điều đó có nghĩa là bạn đã cố gắng cắt danh sách ra ngoài chỉ mục cuối cùng của nó.
Python xác định từng mục trong danh sách bằng chỉ mục của nó. Và chỉ mục của một danh sách bắt đầu từ số không. Ví dụ: khi bạn có một danh sách có năm mục, mục đầu tiên của nó nằm ở chỉ mục 0, trong khi mục cuối cùng ở chỉ mục thứ tư.
Ví dụ: trong danh sách năm ngôn ngữ lập trình:
Languages = ["Python", "Go", "PHP", "C", "Perl"]
Chỉ mục cho danh sách trên nằm trong khoảng từ 0 đến 4. Vì vậy, cố gắng cắt nó để in mục thứ năm như được minh họa bên dưới sẽ xảy ra lỗi:
print(languages[5])
Output:
IndexError: list index out of range
Trong ví dụ trên, Python cố gắng tìm kiếm chỉ mục thứ năm trong danh sách và khi không thể tìm thấy nó, nó sẽ tạo ra lỗi chỉ mục danh sách. Đó là bởi vì phần tử đầu tiên (Python) nằm trên chỉ số 0, trong khi phần tử cuối cùng (Perl) nằm trên chỉ mục bốn.
Đó là cơ sở của lỗi “chỉ mục danh sách nằm ngoài phạm vi”. Như đã nói, Python ném nó bất cứ khi nào bạn cố gắng cắt một danh sách ngoài chỉ mục cuối cùng của nó.
Cách loại bỏ lỗi “chỉ mục danh sách nằm ngoài phạm vi” trong Python
Vì vậy, làm thế nào bạn có thể loại bỏ lỗi này? Dễ thôi.
Xa hơn phần trước ở trên, bạn có thể in các chỉ mục bằng cách sử dụng vì lặp lại trong việc hiểu danh sách:
indexes = [languages.index(i) for i in languages]
print(indexes)
Output:
[0, 1, 2, 3, 4]
Chỉ mục của một danh sách là cơ sở của việc cắt lát trong lập trình. Vì vậy, vì bạn biết chỉ số cao nhất của danh sách cho đầu ra ở trên (4), bạn có thể giải mã giới hạn lát cắt.
Do đó, để chia nhỏ danh sách và lấy mục cuối cùng:
print(languages[4])
Output:
Perl
Bây giờ nó xuất ra kết quả chính xác.
Điều gì sẽ xảy ra nếu bạn muốn lặp lại danh sách bằng cách sử dụng chỉ mục của nó?
Bên cạnh vòng lặp for Python thông thường, bạn cũng có thể sử dụng khái niệm chỉ mục để lặp qua danh sách. Tuy phương pháp này có vẻ gian nan nhưng đôi khi không thể tránh khỏi. Ví dụ, nó rất hữu ích nếu bạn muốn sắp xếp một danh sách theo thứ tự ngược lại.
Phương pháp này hoạt động bằng cách thiết lập một chỉ mục ban đầu và tăng hoặc giảm nó từng cái một cho đến khi có chỉ mục cuối cùng.
Để in các mục có số chỉ mục tăng dần (mục đầu tiên đến mục cuối cùng), ví dụ:
index = 0 # Initial index
for i in Languages:
print(Languages[index])
index +=1
Output:
Python
Go
PHP
C
Perl
Nhưng điều gì sẽ xảy ra nếu bạn đặt chỉ mục ban đầu thành một thay vì 0? Hãy xem:
index = 1 # Initial index
for i in Languages:
print(Languages[index])
index +=1
Output:
Go
PHP
C
Perl
IndexError: list index out of range
Trong ví dụ trên, việc lập chỉ mục bắt đầu từ mục thứ hai (chỉ mục một, Đi). Vì vậy, trong khi tăng dần, vòng lặp không dừng lại cho đến khi nó hoàn thành số lượng cho năm mục. Điều này buộc chỉ số phải tăng một cho đến mục cuối cùng.
Do đó, phần này chạm đến chỉ mục thứ năm không có sẵn. Vì vậy, nó ném ra một lỗi chỉ mục. Nó có nghĩa là chỉ số tăng theo mô hình sau cho mỗi mục:
1=1, 1+1=2, 1+2=3, 1+3=4, 1+4=5
Thay vì mẫu đúng, đó là:
0=0, 0+1=1, 1+1=2, 1+2=3, 1+3=4
Như bạn có thể thấy, giá trị cao nhất của chỉ mục trên là bốn, điều này đúng vì vòng lặp bắt đầu tăng chỉ mục từ 0.
Do đó, việc đặt chỉ mục ban đầu thành 0 như bạn đã làm trong ví dụ đầu tiên trong phần này sẽ loại bỏ lỗi “chỉ mục danh sách nằm ngoài phạm vi”:
index = 0 # Initial index
for i in Languages:
print(Languages[index])
index +=1 #Increase the index by one for each iteration
Để áp dụng khái niệm này cho việc xuất các mục theo thứ tự ngược lại, bạn sẽ cần trừ một mục khỏi độ dài của mảng. Vì vậy, điều này buộc chỉ mục phải bắt đầu từ bốn và đếm ngược đến chỉ mục đầu tiên, không.
Điều này rất hữu ích nếu bạn không chắc chắn về giá trị độ dài của danh sách đến từ một nguồn, chẳng hạn như cơ sở dữ liệu.
Đây là một ví dụ:
index = (len(Languages)-1)
for i in Languages:
print(Languages[index])
index -=1 #Decrease the index by one for each iteration
Output:
Perl
C
PHP
Go
Python
Nhưng không thể trừ một phần từ độ dài của danh sách sẽ dẫn đến lỗi “danh sách nằm ngoài phạm vi chỉ mục”:
index = (len(Languages)-1)
for i in Languages:
print(Languages[index])
index -=1
Output:
IndexError: list index out of range
Đoạn mã trên gây ra lỗi chỉ mục vì độ dài của danh sách là năm và nó cố gắng bắt đầu lập chỉ mục giảm từ năm xuống 0, trong khi chỉ mục cao nhất là bốn. Vì vậy, nó có nghĩa là danh sách không có chỉ mục thứ năm (mục thứ sáu).
Nhận danh sách xử lý sáng tạo bằng Python
Các lỗi của Python thân thiện với con người và thường có thể đọc được. Luôn luôn, điều này làm cho chúng có thể được theo dõi ở một mức độ hợp lý.
Như bạn đã học, việc loại bỏ lỗi chỉ mục danh sách nằm ngoài phạm vi khá dễ dàng. Nếu bạn gặp phải lỗi này trong các chương trình tương lai của mình, bất kể danh sách phức tạp đến mức nào, bạn có thể áp dụng các khái niệm được giải thích trong bài đăng này để giải quyết vấn đề.
Hãy thoải mái sáng tạo với những danh sách phức tạp. Bạn cũng có thể muốn tìm hiểu cách sắp xếp danh sách bằng Python vào thời gian rảnh để hiểu rõ hơn về tất cả.
Đọc tiếp
Thông tin về các Tác giả