列表索引超出范围循环Python
我正在运行一个循环(更像是一个迭代过程),目的是计算一对文本文件的余弦相似性,一个包含84个文本文件的数据集。我遵循的逻辑是首先从文档0和1计算它,然后从文档1和2计算它,直到文档n-1和n。我的编码方式如下:列表索引超出范围循环Python,python,loops,Python,Loops,我正在运行一个循环(更像是一个迭代过程),目的是计算一对文本文件的余弦相似性,一个包含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
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
毫不奇怪,我的代码给了我以下错误:列表索引超出范围
。当i=len(data)
时,有没有办法告诉循环停止
我刚刚循环到len(data)-1
。你知道这会带来什么变化吗
顺便说一下,我不同意用这么多函数填充
globals()
。其中有84个。除非您没有将它们用于pythonshell(用于快速工作),否则我不建议您尝试这种方法。您确实告诉了循环停止,但是数据[I+1]
才是故障所在。也许您想要range(len(data)-1)
。不要毫无理由地使用globals()
。假设你没有伟大的理由,除非你能解释为什么你的理由是伟大的。
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