代码之家  ›  专栏  ›  技术社区  ›  Economist_Ayahuasca

列表索引超出范围循环Python

  •  -4
  • Economist_Ayahuasca  · 技术社区  · 8 年前

    我正在运行一个循环(更像是一个迭代过程),目的是计算一对文本文件和一个包含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) ?

    1 回复  |  直到 8 年前
        1
  •  1
  •   TheRandomGuy    8 年前
    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个。除非您没有将它们用于PythonShell(用于快速工作),否则我不会建议您尝试此操作。