簡體   English   中英

Python:列表索引超出范圍-while / for循環

[英]Python: list index out of range - while/for loop

我有一個清單

abc = ['date1','sentence1','date2','sentence2'...]

我想對句子進行情感分析。 之后,我想將結果存儲在一個類似以下的列表中:

xyz =[['date1','sentence1','sentiment1'],['date2','sentence2','sentiment2']...]

為此,我嘗試了以下代碼:

def result(doc):
    x = 2
    i = 3
    for lijn in doc:
        sentiment = classifier.classify(word_feats_test(doc[i]))
        xyz.extend(([doc[x],doc[i],sentiment])
        x = x + 2
        i = i + 2

len(abc)約為7500。由於我不想使用列表的前兩個元素,因此我以x為2和​​i為3開始。

無論我嘗試什么,我都會不斷得到錯誤“列表索引超出范圍”(同時,對於循環...)

有人可以幫我嗎? 謝謝!

如評論所述-沒有棧跟蹤,我們將無法幫助您發現代碼中的錯誤。 但是很容易解決這樣的問題:

xyz = []
def result(abc):
    for item in xrange(0, len(abc), 2): # replace xrange with range in python3
        #sentiment = classifier.classify(word_feats_test(abc[item]))
        sentiment = "sentiment" + str(1 + (item + 1) / 2) 
        xyz.append([abc[item], abc[item + 1], sentiment])

您可能想了解使程序員輕松工作的內置函數。 (為什么要擔心范圍已經增加呢?)

#output
[['date1', 'sentence1', 'sentiment1'],
 ['date2', 'sentence2', 'sentiment2'],
 ['date3', 'sentence3', 'sentiment3'],
 ['date4', 'sentence4', 'sentiment4'],
 ['date5', 'sentence5', 'sentiment5']]

嘗試這個

i =0
for i in xrange(0,len(doc) -1)
    date = doc[i]
    sentence = doc[i + 1]
    sentiment = classifier.classify(word_feats_test(sentence))
    xyz.append([date,sentence,classifier])

只需要一個索引。 重要的是知道何時停止。

另外,檢查一下extend和append之間的區別

最后,我建議您將數據存儲為詞典列表而不是列表列表。 這樣,您就可以通過字段名而不是index來訪問項目,這使代碼更簡潔。

如果一次要從列表中選擇兩個元素,則可以使用生成器,然后將元素傳遞給分類器:

abc = ["ignore","ignore",'date1','sentence1','date2','sentence2']

from itertools import islice


def iter_doc(doc, skip=False):
    it = iter(doc)
    if skip: # if  skip is set, start from index doc[skip:]
         it = iter(islice(it, skip, None))
    date, sent = next(it), next(it)
    while date and sent:
        yield date, sent
        date, sent = next(it, ""), next(it, "")


for d, sen in result(abc, 2): # skip set to to so we ignore first two elements
    print(d, sen)

date1 sentence1
date2 sentence2

因此,要創建列表xyz列表,可以使用列表理解:

xyz = [ [d,sen,classifier.classify(word_feats_test(sen))] for d, sen in iter_doc(abc, 2)]

這很簡單。 你可以試試:

>>> abc = ['date1','sentence1','date2','sentence2'...]    
>>> xyz = [[ abc[i], abc[i+1], "sentiment"+ str(i/2 + 1)] for i in range(0, len(abc), 2) ]
>>> xyz
output : [['date1', 'sentence1', 'sentiment1'], ['date2', 'sentence2', 'sentiment2'], .....]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM