【问题标题】:list index out of range loop Python列表索引超出范围循环Python
【发布时间】: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()。假设你没有很好的理由,除非你能解释为什么你的理由很好。

标签: python loops


【解决方案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(为了快速工作),否则我不建议您尝试这个。

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 2020-07-23
    • 2022-09-23
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2019-01-07
    相关资源
    最近更新 更多