此for循环不会遍历列表中的所有元素

时间:2020-07-02 17:37:22

标签: python python-3.x list loops dictionary

我写了一个小算法,使我能够根据单词的位置为单词分配权重,并检查单词在词典中是否存在。脚本在元素列表中循环,然后为每个单词检索索引,如果在词典中找到该单词,则将单词的索引乘以1,如果不是,则值为0。保存在字典中,它们的总和除以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')

1 个答案:

答案 0 :(得分:1)

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