用python计数字母

时间:2017-06-17 15:58:40

标签: 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
        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)) 

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:7)

from collections import Counter

letter_count = Counter(mystring)

答案 1 :(得分:7)

轻松修复

您可以使用Counter

进行统计
from collection import Counter

ctr = Counter(list_string)

现在ctrCounter:一种特殊的字典。它将列表中的元素映射到数字(它在列表中的时间量)。未见过的元素映射到0。

错误

这是因为每次重新计算该值时,都会覆盖

说清单是:

['a','b','a','a']

现在,您首先将k - 光标(^)设置为第一个元素,将kk - 光标(v)设置为相同:

#v
['a','b','a','a']
#^

现在我们计算a的数量并获得3.然后我们前进,k - 计数器并计算b s(1)的数量。现在光标再次移动到第二个a

#        v
['a','b','a','a']
#        ^

现在我们再次计算'a'的数量,但现在我们得到2:因为kk - 光标忽略第一个。最后,我们将光标移动到最后'a',并计算'a'的数量,猜猜是什么?我们得到1.所以我们把它重写为1.

#            v
['a','b','a','a']
#            ^

无论元素出现在列表中的次数如何,我们总是将其计为 last 时间,然后计数显然总是为1.

答案 2 :(得分:1)

letter_count = { x : list(mystring).count(x) for x in set(mystring)}

正如所指出的那样,如果你的元素是可混合的,那么一个漂亮的pythonic单线程具有差的渐近复杂度,在这种情况下使用count(...)将成为线性操作。