【发布时间】:2016-04-05 10:55:59
【问题描述】:
我正在运行一个循环(更像是一个迭代过程),目的是计算一对文本文件的余弦相似度,一个包含 84 个文本文件的数据集。我遵循的逻辑是首先从文档 0 和 1 开始计算,然后是文档 1 和 2,直到文档 n-1 和 n。我的编码方式如下:
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) 时停止?
【问题讨论】:
-
您确实告诉循环停止,但
data[i + 1]是错误的。也许你想要range(len(data) - 1)。 -
不要无故使用
globals()。假设你没有很好的理由,除非你能解释为什么你的理由很好。