使用python查找字符串中最常见的char

时间:2013-10-29 20:38:56

标签: python string

我编写了bellow函数来查找字符串中最常出现的char,它适用于:

  1. “Hello World!”
  2. “你好吗?”
  3. “One”(如果字符串只有唯一字母,则返回第一个字母字符)
  4. 它在以下字符串“Lorem ipsum dolor sit amet”中失败。最常见的字母都是3次出现,它会产生一个空白字符串而不是给我一个(它应该按字母顺序给出第一个)

    def frequent_char(text):
    
        charset = ''.join(sorted(text))
    
        maxcount = 0
        maxchar = None
    
        for item in charset.lower():
            charcount = text.count(item)
    
            if charcount > maxcount :
                maxcount = charcount
                maxchar = item
    
        return maxchar
    

    我不知道我在代码中犯了什么错误。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:5)

空格Lorem ipsum dolor sit amet中有四个出现。

所以,如果你的问题是

  

查找字符串中最常出现的字符

你的功能就像一个魅力。

修改

由于您在问题中同时使用“char”和“letter”,因此您所询问的内容并不完全清楚。由于'char'比Python中的'letter'更容易,我决定将你的问题解释为关于字符的问题。

答案 1 :(得分:2)

优雅的解决方案是使用collections.Counter,请参阅:http://docs.python.org/2/library/collections.html#counter-objects

>>> counter = Counter('Lorem ipsum dolor sit amet')

最常出现的char是:

>>> counter.most_common(1)
[(' ', 4)]

如果你不关心空间:

>>> counter.most_common(2)[1]
('m', 3)

简单!

答案 2 :(得分:0)

从字符串中删除所有空格以使其正常工作。

def frequent_char(text):

    charset = ''.join(sorted(text))
    textTmp = text.replace(" ", "")  # add this to remove spaces
    maxcount = 0
    maxchar = None
    for item in charset.lower():
        charcount = textTmp.count(item)

        if charcount > maxcount:
            maxcount = charcount
            maxchar = item

return maxchar