2017-02-23 108 views
1

我正在編寫一個函數,它將遍歷文本項目列表 - 解析每個項目,並將解析的項目追加到列表中。 的代碼如下:列表索引超出範圍 - 索引錯誤Python

clean_list = [] 

def to_words(list): 
    i = 0 
    while i <= len(list): 
     doc = list[i] 
     # 1. Remove HTML 
     doc_text = BeautifulSoup(doc).get_text() 
     # 2. Remove non-letters (not sure if this is advisable for all documents)  
     letters_only = re.sub("[^a-zA-Z]", " ", doc_text) 
     # 3. Convert to lower case, split into individual words 
     words = letters_only.lower().split()            
     # 4. Remove stop words 
     stops = set(stopwords.words("english")) 
     meaningful_words = [w for w in words if not w in stops] 
     # 5. Join the words back into one string separated by space, and return the result. 
     clean_doc = (" ".join(meaningful_words)) 
     i = i+1 
     clean_list.append(clean_doc) 

但是當我通過列表進入該功能,to_words(list),我得到這個錯誤:IndexError: list index out of range

我嘗試沒有技術上的定義to_words功能,即避免了循環試驗,手動將i改爲0,1,2等,然後執行該功能的步驟;這工作正常。

爲什麼我在使用函數(和循環)時面臨這個錯誤?

+0

你能在這裏給出完整的回溯嗎? –

+2

長度爲5的列表具有索引'0,1,2,3,4'。 - 你的'而我<= len(列表)'給出'我'值'0,1,2,3,4,5'。將它改爲'while while asongtoruin

+1

也不要使用變量名'list',因爲這會導致與'list'對象類型混淆。 – asongtoruin

回答

1

變化 while i <= len(list)while i < len(list)

目錄索引開始從0所以,i <= len(list)將滿足指數等於len(list)所以這是將一個索引錯誤。

1。更好地使用而不是使用文件循環,列表支持迭代list。像

for elem in list_: 
    # Do your operation here 

2。請勿使用list作爲變量名稱。