Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python计算字母_Python_String - Fatal编程技术网

用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']
#            ^