用python计算字母
我想做的是计算每个字母在字符串中出现的次数。我想将详细信息存储在字典中。用python计算字母,python,string,Python,String,我想做的是计算每个字母在字符串中出现的次数。我想将详细信息存储在字典中。 以下是我的尝试: def scan(string): list_string = [] for letter in string: list_string.append(letter) list_string.sort() scanned = {} for k in range(0,len(list_string)): count = 0
以下是我的尝试:
def scan(string):
list_string = []
for letter in string:
list_string.append(letter)
list_string.sort()
scanned = {}
for k in range(0,len(list_string)):
count = 0
for kk in range(k,len(list_string)):
if list_string[k] == list_string[kk]:
count += 1
scanned.update({list_string[k]:count})
return scanned
但是,每个键的值都为1,即使有时一个字母出现不止一次
当我尝试这个的时候效果很好
print("Letter '{}': \t {}.format(list_string[k],count))
有人能帮忙吗
from collections import Counter
letter_count = Counter(mystring)
正如正确指出的那样,如果元素是可散列的,则具有糟糕的渐进复杂性的非常python的一行程序,在这种情况下,使用count(…)将成为一个线性操作。很容易修复
您只需使用计数器进行计数即可:
from collection import Counter
ctr = Counter(list_string)
现在,ctr
是一个计数器
:一种特殊的字典。它将列表中的元素映射到数字上(列表中的时间)。未看到的元素映射到0上
错误
这是因为每次重新计算该值时,都会覆盖它
假设列表是:
['a','b','a','a']
现在,首先将k
-光标(^
)设置为第一个元素,将kk
-光标(v
)设置为相同:
#v
['a','b','a','a']
#^
现在我们计算a
s的数量,得到3。接下来,我们前进,k
-计数器并计算b
s(1)的数量。现在光标再次移动到第二个a
:
# v
['a','b','a','a']
# ^
现在我们再次计算'a'
s的数量,但现在我们得到2:因为kk
-光标忽略了第一个。最后,我们将光标移动到最后一个'a'
,然后计算'a'
的数量,猜猜看是什么?我们得到1。所以我们把它改写成1
# v
['a','b','a','a']
# ^
不管一个元素在列表中出现的次数是多少,我们总是最后一次对它进行计数,然后计数显然总是1。对于可散列的内容,不要使用count(…)
。它把一个O(n)算法变成了一个O(n^2)算法。@WillemVanOnsem,嗯,你说得对。。。在循环中增加默认dict会更好。我对答案投了赞成票,因为如果元素是不可散列的,它就可以工作。因此,它具有附加值。但你最好在回答中提到这一点。@WillemVanOnsem谢谢!我很感激。更新了我的答案。:)谢谢你的回答!
# v
['a','b','a','a']
# ^