如何在Python中计算符号列表的频率

如何在Python中计算符号列表的频率,python,frequency,Python,Frequency,我试图计算每个符号在列表中显示的次数的频率。到目前为止,我有这段代码,它似乎不能正常工作,因为它显示了下面的错误消息 uniques = set(words.split()) AttributeError: 'tuple' object has no attribute 'split' 这是我到目前为止的代码 def calculate_frequency(): words = () uniques = set(words.split()) fr

我试图计算每个符号在列表中显示的次数的频率。到目前为止,我有这段代码,它似乎不能正常工作,因为它显示了下面的错误消息

uniques = set(words.split())
AttributeError: 'tuple' object has no attribute 'split'
这是我到目前为止的代码

def calculate_frequency():
        words = ()
        uniques = set(words.split())
        freqs = [(item, words.split.count(item)) for item in uniques]
        print(freqs)
下面显示了我想知道的以及存储在变量“words”中的频率的符号…

您可以使用
Counter()
查找每个字符的频率

from collections import Counter

a="@#@#$%$#^@&"
print Counter(a)
#output Counter({'@': 3, '#': 3, '$': 2, '%': 1, '&': 1, '^': 1})
如果您有一个字符串列表,例如
a=[“##$$”、“@#$$”、“@#!@#!!@”]
,那么您可以使用
计数器('.join(a))
进行频率计数,使用,然后只需输入整个文本;我们可以通过拆分和重新连接来删除换行符

我假设
words
是一个带有新行的全局字符串;使用
str.splitlines()
在换行符上拆分:

这将生成一个从最常见符号到最不常见符号排序的频率列表

演示:


似乎工作不正常从来都不是正确的问题描述。请在你的描述中具体一些。你所说的符号是指整个字符序列还是单个字符?例如,你是将
+
等或
+/084&“
作为一个符号来计算吗?如果是后者,你为什么要使用
set()
呢?这只能保证所有的“符号”的计数都是1。什么是“单词=()“?所有单词都包含在元组中吗?Martijn,我想知道每个字符的频率。例如,#出现2次,%出现6次……请不要将您的问题更改为与答案中显示的代码相匹配;我在注释和答案中都提到了您的原始代码,您的错误消息也反映了原始问题。请不要更改ange历史记录。当我尝试此代码时,计数器(a)@sundarnataraj上出现错误サンダーナタラジ 我已经对您的答案进行了编辑,修改了一些拼写/语法,还修复了代码中的一个错误,您的代码中有一个字符串是
“#@#$$”
,而不是
“##$$”
,这导致了语法错误。@user3662176您是否将此函数用作
计数器(a)
?如果这是不正确的,Python是一种区分大小写的语言,正确的用法是计数器(a)。不,我将它用作计数器(a)uniques=set(words.split())AttributeError:“tuple”对象没有属性“split”@user3662176:我不知道,是吗?您还没有显示足够的其余代码。我已经演示了,根据我记录的假设,代码是有效的。@user3662176:您是否正在使用Python 3?然后是
print(symbol,count)
@user3662176:您在那里使用的缩进错误,并且那里的会话也没有
单词
名称。请在你的问题中更加完整;尝试包含错误信息。如果您是编程新手,堆栈溢出不是您的教程。试着先学习真正的教程。
from collections import Counter

def calculate_frequency():
    freqs = Counter(''.join(words.splitlines()))
    for symbol, count in freqs.most_common():
        print symbol, count
>>> from collections import Counter
>>> words = '''\
... #+/084&"
... #3*#%#+
... 8%203:
... ,1$&
... !-*%
... .#7&33&
... #*#71%
... &-&641'2
... #))85
... 9&330*
... '''
>>> def calculate_frequency():
...     freqs = Counter(''.join(words.splitlines()))
...     for symbol, count in freqs.most_common():
...         print symbol, count
... 
>>> calculate_frequency()
# 8
& 7
3 6
% 4
* 4
1 3
0 3
8 3
) 2
+ 2
- 2
2 2
4 2
7 2
! 1
" 1
$ 1
' 1
, 1
/ 1
. 1
5 1
6 1
9 1
: 1