2013-09-24 182 views
-3

我正在计算出一次发生的字母出现次数。我到了Python所做的那一部分,但是现在我希望如果它发生两次,他不会计算两次字母。计算字符串中某个字母的出现次数

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

到目前为止的代码是:

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

使用字典或设置 – smac89

+5

“你'重试' - 所以你有你试过的代码,对吧?请张贴它。 –

+3

“我的名字”作为参数的函数返回“211121”? –

回答

-1

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

  1. 循环遍历字符串中的字符;
    1.1将你找到的每个字符放在散列表/字典中。第一次找到一个字符时,为该条目赋值1。对于同一个人物的每一次新的遭遇,增加这个值。

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

  3. 现在再循环原始字符串;
    3.1对于每个字符,作为字符串附加到foo与哈希表/字典中该字符对应的值。

您可能要代表一个字符出现这种情况超过9倍括号之间的事情,即:

多少木头木夹头夹头如果木夹头可能,并会扔木头

会导致一些这样开始的:

6 [12] 7 ...

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

我想我更喜欢'''.join(str(c [item])的OrderedDict.fromkeys(strs))项目''到'seen.add'技巧。 – DSM

+0

@DSM好的建议,解决方案已更新。 –

相关问题