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

2024-10-01 02:35:59 发布

您现在位置:Python中文网/ 问答频道 /正文

当我把一个字符串列表传递给这个函数时,我希望它返回一个矩阵,指出每个唯一的单词在字符串中出现的次数,但是,我得到一个矩阵,第一个字符串的值重复了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, “秒”:0.0}, {'the':0.2, “第一”:0.2, “文档”:0.2, “第三”:0.0, “是”:0.2, “一”:0.0, “和”:0.0, “this”:0.2, “秒”:0.0}, {'the':0.2, “第一”:0.2, “文档”:0.2, “第三”:0.0, “是”:0.2, “一”:0.0, “和”:0.0, “this”:0.2, “秒”:0.0}, {'the':0.2, “第一”:0.2, “文档”:0.2, “第三”:0.0, “是”:0.2, “一”:0.0, “和”:0.0, “this”:0.2, “秒”:0.0}]


Tags: the字符串in文档fordoccountthis
2条回答

我对此进行了修改,以获得与打印内容相同的非重复数据:

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

您的代码所做的是重复地将相同的对象(word_dict)添加到matr。当然,因为matr是一个列表,它可以处理这个。。。你将有多个引用同一本词典。同时,您正在更新词典。所以你在打印列表时看到的是字典的最终状态。。。N次。你知道吗

现在我怀疑您打算在matr中保存word_dict状态的快照。但是如果你想这样做,你需要在matr中保存word_dict的拷贝

    matr.append(words_dict.copy())

另一方面,如果您打算为corp中的每个doc生成一个单独的词频字典,那么您需要在外循环中移动word_dict的创建和初始化。你知道吗


另外,你计算单词数量和频率的方法似乎完全错误。我想这就是你在这里想做的。你知道吗


注意:如果您使用更有意义的方法和变量名和/或向代码中添加适当的注释,其他人将更容易理解您的代码的意图。你知道吗

相关问题 更多 >