我是通过 http://GrokLearning.com 学习 Python 3.3 的初学者
我的目标是编写一个 Word Counter 程序,从用户那里读取多行纯文本,然后打印出用户输入的每个不同的单词,并计算该单词出现的次数。所有输入都将仅为小写单词 - 没有标点符号或数字。输出列表将按字母顺序排列。
该计划不接受任何带有计数器或收藏的提交。当我使用 Counter 提交在 Stack Exchange 上找到的解决方案时,编辑器只是假装 Counter 代码不存在。
这是我目前所拥有的:
all = []
count = {}
line = input("Enter line: ")
while line:
word = line.split()
line = input("Enter line: ")
for w in word:
count[w] = word.count(w)
for word in sorted(count):
print(word, count[word])
我的代码的问题:如果一个词在多行中重复出现,代码将只计算该词出现的最后一行的出现次数(而不是总出现次数)。
> this is another test test
> test test test test test
> test test test
>
another 1
is 1
test 3
this 1
我知道我没有使用我的列表“全部”。我曾尝试 all.append(word) 列出用户输入的所有单词,但我的代码计数为 0(可能是因为最后一行需要为空才能结束 while 循环?)
作为引用,我已经浏览了所有免费模块,但没有浏览任何付费模块。见谅:本人知识有限,请简单说明一下。
最佳答案
问题出在这里:
for w in word:
count[w] = word.count(w)
在您的代码中,您不会添加到您的计数中。相反,您每次遇到单词时都重置计数。例如,如果 count['this']
之前是 1,下次遇到它时,您会再次将计数设置为 1,而不是将其加 1。
第二个问题是表达式 word.count(w)
。它是一个单词在一行中出现多少次的计数,同时,循环遍历每个单词。这意味着如果您正确更新(而不是重置)您的计数,您将计数过多。
例如,如果该行有三个'test',那么您将更新计数 3 x 3 = 9。
要解决这个问题,您需要解决两种情况:
- 如果一个单词已经在计数中(即您以前见过该单词),则将计数增加 1
- 如果这个词不在计数中,这是你第一次看到它,将计数设置为1
这里有一个建议:
for w in word:
if w in count:
count[w] += 1
else:
count[w] = 1
关于python - 查找词频 - 无需计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23895028/