为什么list()。append()给我重复的值?

问题描述 投票:1回答:2

当我将字符串列表传递给此函数时,我希望它返回一个矩阵,说明每个唯一单词出现在字符串中的次数,但是,我得到一个矩阵,其中第一个字符串的值重复4次。这是代码

def tf(corp):
words_set = set()
for i in corp:
    a=i.split(' ')
    for j in a:
        words_set.add(j)
words_dict = {i:0 for i in words_set}
wcount=0
matr=list()
for doc in corp:
    for worduni in words_dict:
        count=0

        for words in doc.split(' '):
            if words==worduni:

                count+=1
        words_dict[worduni]=count/len(doc.split(' '))
    print(words_dict)
    matr.append(words_dict)   

return matr

当我打印matr的值时,我得到[{'the':0.2,“第一”:0.2,'文档':0.2,'第三':0.0,'是':0.2,'一个':0.0,'和':0.0,'this':0.2,'second':0.0},{'the':0.2,“第一”:0.2,'文档':0.2,'第三':0.0,'是':0.2,'一个':0.0,'和':0.0,'this':0.2,'second':0.0},{'the':0.2,“第一”:0.2,'文档':0.2,'第三':0.0,'是':0.2,'一个':0.0,'和':0.0,'this':0.2,'second':0.0},{'the':0.2,“第一”:0.2,'文档':0.2,'第三':0.0,'是':0.2,'一个':0.0,'和':0.0,'this':0.2,'second':0.0}]]

python list
2个回答
1
投票

您的代码正在做的是将相同的对象(word_dict)重复添加到matr。自然,由于matr是一个列表,它可以处理此…,并且您将对同一词典有多个引用。同时,您正在更新字典。因此,在打印列表时看到的是字典的最终状态... N次。


0
投票
def tf(corp): words_set = set() for i in corp: a=i.split(' ') for j in a: words_set.add(j) words_dict = {i:0 for i in words_set} wcount=0 matr=list() for doc in corp: for worduni in words_dict: count=0 for words in doc.split(' '): if words==worduni: count+=1 words_dict[worduni]=count/len(doc.split(' ')) print(words_dict) matr.append(words_dict.copy()) return matr
© www.soinside.com 2019 - 2024. All rights reserved.