2016-04-05 67 views
-4

我正在運行一個循環(更像是一個迭代過程),目的是計算一對文本文件的一個數據集的餘弦相似度和84個文本文件。我遵循的邏輯是首先從文檔0和1計算它,然後計算文檔1和2,直到文檔n-1和n。我編寫它的方式如下:列表索引超出範圍循環Python

my_funcs = {} 
for i in range(len(data)): 
    def foo(x, y): 
     x = data[i]['body'] 
     y = data[i+1]['body'] 
     tfidf = vectorizer.fit_transform([x, y]) 
     return ((tfidf * tfidf.T).A)[0,1] 


    foo.func_name = "cosine_sim%d" % i 
    my_funcs["cosine_sim%d" % i] = foo 

globals().update(my_funcs) # Export to namespace 

毫不奇怪我的代碼給我下面的錯誤:list index out of range。有沒有什麼辦法可以告訴循環停止當i = len(data)

+1

你確實告訴循環停止,但'data [i + 1]'是錯誤的。也許你想'range(len(data)-1)'。 – msw

+3

不要使用'globals()'沒有很大的理由。假設你沒有很好的理由,除非你能解釋你的理由爲什麼很好。 – msw

回答

1
my_funcs = {} 
for i in range(len(data)-1): 
    def foo(x, y): 
     x = data[i]['body'] 
     y = data[i+1]['body'] 
     tfidf = vectorizer.fit_transform([x, y]) 
     return ((tfidf * tfidf.T).A)[0,1] 


    foo.func_name = "cosine_sim%d" % i 
    my_funcs["cosine_sim%d" % i] = foo 

globals().update(my_funcs) # Export to namespace 

我剛剛做了len(data)-1的循環。你知道它做了什麼改變嗎?

順便說一句,我不同意填寫globals()這麼多的功能。其中有84個。除非你沒有使用Python Shell for Python(用於快速工作),否則我不會建議你試試這個。