【发布时间】:2021-02-01 05:36:14
【问题描述】:
我正在尝试找到一种方法来遍历文本文件和列表以查找字符频率。我知道我可以为此使用 Count() 。但是 Count() 给出了一切,包括空格句号和诸如此类的东西。它也没有按字母顺序显示字符频率。我找到了一种方法,它有效,但不是真的。我稍后会解释。此外,当我尝试输入频率时,我得到一个 KeyError。我也会解释的。
我不想把我的整个项目都放在这里,所以我先解释一下。我有一个名为alphabet_list 的单独列表,其中包括字母表。有一个文本文件已被读取并转换为大写,名为 new_text。
字符频率代码:
for i in range(len(alphabet_list)):
for c in new_text:
if c == alphabet_list[i]:
count += 1
else:
count = 0
print(alphbet_list[i] + " " + str(count)
i += 1
输出
A 0
A 0
.
.
.
A 1
A 0
.
.
.
B 0
.
.
.
B 1
B 2
B 0
.
.
.
Z 0
P.S str(count) 暂时存在,因为我想看看打印出来的样子,我需要将结果存储在字典中
我的输出是这样的,就像我说的那样有效,但不是真的。它会迭代,但它会迭代每个字母并已经打印出结果,并且不会迭代整个文本文件而只打印最终结果。如果有另一个与以前相同的字母彼此相邻,它将添加到结果中。 Ex (... bb...) 它将是 B 1, B 2 ,如我的输出中所示。由于某种原因,当我使用 return 它不起作用。它什么也不返回,只是结束程序。
KeyError 的第二个代码:
- 我跳过了上面的问题,因为我找不到答案,也不想浪费我的时间,但遇到了另一个问题,哈哈*
for i in range(len(alphabet_list)):
for c in new_text:
if c == alphabet_list[i]:
count += 1
else:
count = 0
c_freq[alphabet_list[i]] == count
print(c_freq)
i += 1
这个很简单,我得到了一个 KeyError: 'A'。 我试着只做
i = 3 #just random number to test
count = 50
c_freq[alphabet_list[i]] == count
print(c_freq)
它有效,所以我认为这个问题也与上述问题有关(?也许)。无论如何,任何帮助都会很棒。谢谢!
抱歉,问题太长了,但我真的需要帮助。
【问题讨论】:
标签: python-3.x list dictionary for-loop keyerror