Python 中的频率分析 - 打印带有频率的字母而不是带有频率的数字
s=array1 #user inputs an array with text in it
n=len(s)
f=arange(0,26,1)
import collections
dict = collections.defaultdict(int)
for c in s:
dict[c] += 1
for c in f:
print c,dict[c]/float(n)
在输出中, c 是数字而不是字母,我不知道如何将其转换回字母。
另外,有没有什么方法可以将频率/字母放入数组中,以便可以将它们绘制在直方图中?
s=array1 #user inputs an array with text in it
n=len(s)
f=arange(0,26,1)
import collections
dict = collections.defaultdict(int)
for c in s:
dict[c] += 1
for c in f:
print c,dict[c]/float(n)
In the output, c is in numbers rather then letters and I'm not sure how to convert it back to letters.
Also, is there any way to get the frequency/letters into arrays so it'd be possible to plot them in a histogram?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
应该指出的是,您没有使用正确的类型调用 map参数(因此是
TypeError
)。它需要一个函数和一个或多个应用该函数的可迭代对象。你的第二个参数是 toChar[i] ,它是一个字符串。所有可迭代对象都实现__iter__
。举例说明:DTing 的答案让我想起了collections.Counter:
It should be pointed out that you aren't calling map with the right type of arguments (thus the
TypeError
). It takes a single function and one or more iterables, to which the function is applied to. Your second argument is toChar[i] which would be a string. All iterables implement__iter__
. To illustrate:DTing's answer reminded me of collections.Counter:
如果您使用的是 python 2.7 或更高版本,您可以使用 collections.Counter。
Python 2.7+
Python 3+
这还将按频率降序返回 (char,Frequency) 元组。
If you are using python 2.7 or greater you can use collections.Counter.
Python 2.7+
Python 3+
This will also return the (char, frequency) tuple in descending order of frequency.
要将数字转换为其代表的字母,只需使用内置的
chr
:To convert a number to the letter it represents, simply use the built-in
chr
:将频率/字母转换为数组:
To convert frequency/letters into arrays: