计算字符串中字母的出现次数

时间:2013-09-24 18:52:08

标签: python

我正在尝试计算刺痛中字母的出现次数。我得到了Python所做的部分,但是,现在我想要的是,如果它出现两次,他就不会计算两次。

所以,“我的名字”,应该给出一个字符串'21111',而不是'211121'(所以不计算两次m的两次)。

目前的代码是:

for char in tested_str2: 
    if char in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ': 
        x = tested_str2.count(char) 
        percentage = percentage + str(x) 

2 个答案:

答案 0 :(得分:1)

您可以使用collections.Counterset

>>> from collections import Counter
>>> strs = ''.join(x for x in "My name" if x.isalpha()).lower()
>>> c = Counter(strs)
>>> seen = set()
>>> ''.join(str(c[item]) for item in strs 
                                      if item not in seen and not seen.add(item))
'21111'

根据@DSM的建议,您也可以使用set代替collections.OrderedDict

>>> from collections import OrderedDict
>>> ''.join(str(c[item]) for item in OrderedDict.fromkeys(strs))
'21111'

答案 1 :(得分:-1)

我的Python生锈了,所以我会给你alghoritm而不是完整的代码解决方案。

  1. 循环播放字符串中的字符;
    1.1将您找到的每个字符放在哈希表/字典中。第一次找到字符时,为该条目指定值1。对于同一角色的每次新遭遇,请增加此值。

  2. 创建一个空字符串foo;

  3. 现在再次循环原始字符串;
    3.1对于每个字符,将foo字符串附加到哈希表/字典中与该字符对应的值。
  4. 你可能想要代表一个在括号之间发生超过9次的单个字符,即:

      

    如果木夹头能够并且能够夹住木头,那么木头夹头会有多少木头

    会导致某些事情开始:

      

    6 [12] 7 ...