找到出现最多的字母

给你一个其中包含不同的英文字母和标点符号的文本,你要找到其中出现最多的字母,返回的字母必须是小写形式,
当检查最想要的字母时,不区分大小写,所以在你的搜索中 "A" == "a"。 请确保你不计算标点符号,数字和空格,只计算字母。

如果你找到 两个或两个以上的具有相同的频率的字母, 返回那个先出现在字母表中的字母。 例如 -- “one”包含“o”,“n”,“e”每个字母一次,因此我们选择“e”。

输入: 用于分析的文本.

输出: 最常见的字母的小写形式。

def checkio(text: str) -> str:
    str = text.lower()
    dic = {}
    for i in str:#遍历所有字母,放进字典,value+1
        if i.islower():
            if dic.get(i) == None:
                dic[i] = 1
            else:
                dic[i] = dic.get(i) + 1
    li = sorted(dic.items(), key=lambda x: x[1])#按key来排序
    ff= []
    for i in li:
        if i[1] == li[-1][1]:#找到最大值对应的都放进ff
            ff.append(i)
    ff = dict(ff)
    ff = sorted(ff.keys())#按key排序
    #replace this for solution
    return ff[0]#返回第一个Key

if __name__ == '__main__':
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert checkio("Hello World!") == "l", "Hello test"
    assert checkio("How do you do?") == "o", "O is most wanted"
    assert checkio("One") == "e", "All letter only once."
    assert checkio("Oops!") == "o", "Don't forget about lower case."
    assert checkio("AAaooo!!!!") == "a", "Only letters."
    assert checkio("abe") == "a", "The First."
    print("Start the long test")
    assert checkio("a" * 9000 + "b" * 1000) == "a", "Long."
    print("The local tests are done.")

他人写法1:

import string

def checkio(text):
    """
    We iterate through latyn alphabet and count each letter in the text.
    Then 'max' selects the most frequent letter.
    For the case when we have several equal letter,
    'max' selects the first from they.
    """
    text = text.lower()
    return max(string.ascii_lowercase, key=text.count)

他人写法2:

from string import ascii_lowercase as letters
checkio = lambda text: max(letters, key=text.lower().count)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值