0

我编写了下面的函数来查找字符串中最频繁出现的字符,它适用于:

  1. “你好世界!”
  2. “你好吗?”
  3. "One"(如果字符串只有唯一字母,则返回第一个字母字符)

它在以下字符串“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

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

4

3 回答 3

5

该空间在中出现了四次Lorem ipsum dolor sit amet

所以如果你的问题是

查找字符串中出现频率最高的字符

你的功能就像一个魅力。

编辑:

由于您在问题中同时使用了“字符”和“字母”,因此并不完全清楚您在问什么。由于“字符”比 Python 中的“字母”要容易得多,因此我决定将您的问题解释为有关字符的问题。

于 2013-10-29T20:41:47.667 回答
2

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

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

最常见的字符是:

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

如果你不关心空间:

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

简单的!

于 2013-10-29T21:41:16.057 回答
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
于 2013-10-29T20:48:11.380 回答