我在查看SO上的职位发布时发现了此编程问题。我认为这很有趣,作为Python初学者,我试图解决它。但是我觉得我的解决方案很…凌乱…有人可以提出任何建议来优化它或使其更清洁吗?我知道这很简单,但是我很乐于编写。注意:Python 2.6
问题:
为一个接受字符串并返回该字符串中出现最多的字母的函数编写伪代码(或实际代码)。
我的尝试:
import string def find_max_letter_count(word): alphabet = string.ascii_lowercase dictionary = {} for letters in alphabet: dictionary[letters] = 0 for letters in word: dictionary[letters] += 1 dictionary = sorted(dictionary.items(), reverse=True, key=lambda x: x[1]) for position in range(0, 26): print dictionary[position] if position != len(dictionary) - 1: if dictionary[position + 1][1] < dictionary[position][1]: break find_max_letter_count("helloworld")
输出:
>>> ('l', 3)
更新的示例:
find_max_letter_count("balloon") >>> ('l', 2) ('o', 2)
有很多方法可以使此操作更短。例如,您可以使用Counter该类(在Python 2.7或更高版本中):
Counter
import collections s = "helloworld" print(collections.Counter(s).most_common(1)[0])
如果没有,您可以手动进行理算(2.5或更高版本有defaultdict):
defaultdict
d = collections.defaultdict(int) for c in s: d[c] += 1 print(sorted(d.items(), key=lambda x: x[1], reverse=True)[0])
话虽这么说,您的实现并没有太严重的错误。