我正在运行一个循环(更多是作为迭代过程),目的是计算一对文本文件的余弦相似度和一个包含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)
时停止?
答案 0 :(得分: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使用(为了快速工作),否则我不建议你试试这个。