這是我正在使用的代碼,它假設從文本檔案中獲取一行并將其分隔并在最后獲取密鑰并使用它來獲取所有行從最小到最大的順序并制作一個段落,我不能了解如何解決錯誤 IndexError: list index out of range "if book_list 2 in book_dict:",有人可以幫我嗎?1
book_data.txt 檔案看起來像這樣,我需要對其進行排序,如上所述
uj5u.com熱心網友回復:
這意味著book_list沒有3個元素。book_list[2]引發您嘗試訪問不存在的元素的錯誤也是如此。python 中的索引從 0 開始,因此 2 元素串列的最終元素位于book_list[1].
如果要訪問最后一個元素,也可以執行book_list[-1]. 這總是給出最后一個元素。
uj5u.com熱心網友回復:
IndexError 表示您的代碼正在嘗試訪問無效的索引。
讓我這樣向您解釋:您有一個包含 5 個元素的串列: ['a','b','c','d','e'] 現在最大長度為 5,因此您可以使用索參考來訪問陣列的有0,1,2,3,4。
但是,如果您嘗試訪問my_list[8]這將回傳一個錯誤,說明索引錯誤,該錯誤指向無效索引以從不存在的串列中獲取專案。
嘗試了解您的情況,您可以執行以下操作,您需要確保變數book_list中至少有 2 個元素才能訪問第二個元素。
簡單來說,你不能從一個只有 1 個蘋果或沒有蘋果的盒子里取出 2 個蘋果。
uj5u.com熱心網友回復:
@Trishant Pahwa 解釋得很好,這個錯誤意味著你正在嘗試獲取一個不存在的專案。讓我們說
book_list = ['book_01', 'book_02', 'book_03']
在這種情況下,book_list是一個長度為 3(三個專案)的串列,但由于該串列使用索引,因此您將擁有 0、1 和 2 個索引。
如果你想得到book_01你會使用book_list[0],因為該專案在索引 0 中。現在如果你嘗試這樣做,book_list[3]你會得到錯誤IndexError,因為索引 3 中沒有任何內容。
我們需要知道 book_data.txt 中的內容才能知道第 9 行中的內容book_list = book_line.strip().split("|")
添加
這里我舉了一個例子,它可能不能解決你所有的問題,但會給你一個想法
from collections import OrderedDict
def main():
book_dict = {}
with open('books.txt','r') as file:
book_file = file.readlines()
print(book_file)
book_quotes = {}
for book_line in book_file:
book_list = book_line.strip().split('|')
# make keys int so can be sort later
keys = int(book_list[1])
print(f'this {book_list[0]} and {keys}')
book_quotes[keys] = book_list[0]
print(book_quotes)
order = OrderedDict(sorted(book_quotes.items()))
print(order)
main()
請注意:
- 這不是最好的實作,但它很簡單。
- 我使用
with和open打開檔案。(我重新創建了 book.txt 檔案)。 - 我
OrderDict從模塊中使用Collections。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/477046.html
標籤:python-3.x 语法错误
