首页 > 解决方案 > 此 for 循环不会遍历列表中的所有元素

问题描述

我编写了一个小算法,使我能够根据单词的位置为单词分配权重,并检查它们在词典中的存在。脚本在元素列表中循环,然后为每个单词检索索引,如果在词典中找到该单词,则该单词的索引乘以 1,如果不是,则值为 0。毕竟单词的权重 I保存在字典中,它们的总和除以 elt 的 len。

到目前为止它有效,但我不明白为什么,循环停在一个元素上并且不涵盖整个词典。

这是一个示例:


lexiconpos =['beau','bel', 'gentil', 'bon', 'généreux']
lexiconneg =['gros', 'laid','méchant']

def find_nearest(texte, liste1, liste2):
    d_neg = {}
    d_pos = {}
    d_0 = {}

    sentences_weight =[]
    for elt in texte:
        print(elt)
        for w in elt.split():
            #print (w, ':')
            pos = elt.split().index(w)
            #print(pos)
            if w in lexiconpos:
                d_pos[w] = pos * 1
                
            elif w in lexiconneg:
                d_neg[w] = pos * 1
            
            else: 
                d_0[w] = 0
        
        mot_weight_pos = sum(d_pos.values()) /  len(elt)
        mot_weight_neg = sum(d_neg.values()) / len(elt)
        print(d_neg)
        print(d_pos)
        print(d_0)
        print(mot_weight_pos)
        print(mot_weight_neg)
    
        if mot_weight_pos > mot_weight_neg:
            return elt, "pos"
        else:
            return elt, "neg"
                
    
     
a = ['tu être beau mais très méchant', 'ta gros tête est laid mais tu es bon et généreux']
find_nearest(a, lexiconpos, lexiconneg)

结果:不打印其他句子

tu être beau mais très méchant
{'méchant': 5}
{'beau': 2}
{'tu': 0, 'être': 0, 'mais': 0, 'très': 0}
0.06666666666666667
0.16666666666666666
('tu être beau mais très méchant', 'neg')

标签: pythonpython-3.xlistloopsdictionary

解决方案


您的 return 语句位于 for 循环内。函数执行在第一个遇到的 return 语句处终止。将返回语句拉出 for 循环。


推荐阅读