鱼C论坛

 找回密码
 立即注册
查看: 8249|回复: 27

[技术交流] [checkio]---找到出现频率最高的字母---

[复制链接]
发表于 2015-3-21 09:48:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
给你一个其中包含不同的英文字母和标点符号的文本,你要找到其中出现最多的字母,返回的字母必须是小写形式,
当检查最想要的字母时,不区分大小写,所以在你的搜索中 "A" == "a"。 请确保你不计算标点符号,数字和空格,只计算字母。
如果你找到 两个或两个以上的具有相同的频率的字母, 返回那个先出现在字母表中的字母。 例如 -- “one”包含“o”,“n”,“e”每个字母一次,因此我们选择“e”。
输入: 用于分析的文本 (str, unicode).
输出: 最常见的字母的小写形式。
范例:
  1. checkio("Hello World!") == "l"
  2. checkio("How do you do?") == "o"
  3. checkio("One") == "e"
  4. checkio("Oops!") == "o"
  5. checkio("AAaooo!!!!") == "a"
  6. checkio("abe") == "a"
复制代码

ps:checkio上的题,给无聊的鱼油练练手,等下会发些比较有想法的解决方案,也欢迎鱼油们贴出自己的代码,共同研究,共同学习,有兴趣的鱼油可以先写了再看看其他方案

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
戴宇轩 + 5 + 5 + 2 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-21 10:21:40 | 显示全部楼层

回帖奖励 +2 鱼币

本帖最后由 戴宇轩 于 2015-3-21 11:49 编辑
  1. def checkio(text):
  2.     text = text.lower()
  3.     temp = {j: text.count(j) for j in (i.lower() for i in text if i.isalpha())}
  4.     m = max(temp.values())
  5.     return min(i for i in temp.keys() if temp[i] == m)
复制代码
希望楼主多发这种帖子, 让Python版块活跃起来!

评分

参与人数 1鱼币 +2 收起 理由
挥舞乾坤 + 2 以后会边做边发出来,给大家练手

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2015-3-21 12:17:06 | 显示全部楼层
我自己的第一个版本:
  1. def checkio(s):
  2.     r = {}
  3.     s = s.lower()
  4.     for c in s:
  5.         if c.isalpha():
  6.             r.setdefault(c, s.count(c))
  7.     return sorted([x for x in r.items() if x[1] == max(r.values())])[0][0]
复制代码

思路跟戴同学的基本差不多,但是后边的排序略显麻烦了一些.

第二个版本,一行版:
  1. checkio = lambda s:sorted([x for x in {c : s.lower().count(c) for c in s.lower() if c.isalpha()}.items() if x[1] == max({c : s.lower().count(c) for c in s.lower() if c.isalpha()}.values())])[0][0]
复制代码

不知道会不会有人细看,自己看着都有点儿头大!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-21 12:46:09 | 显示全部楼层
大神的版本:
  1. import string​
  2. def checkio(text):
  3.     text = text.lower()
  4.     return max(string.ascii_lowercase, key=text.count)
复制代码


用到了max函数的key参数,又学到了,python果然是强大到只有你想不到的,没有他做不到的.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-21 13:15:31 | 显示全部楼层
本帖最后由 挥舞乾坤 于 2015-3-21 15:26 编辑

另外一个版本:
  1. from collections import Counter
  2. ​
  3. def checkio(text):
  4.     count = Counter([x for x in text.lower() if x.isalpha()])
  5.     m = max(count.values())
  6.     return sorted([x for (x, y) in count.items() if y == m])[0]
复制代码


用到了collections模块,没接触过的可以学习下.关于collections:


collections模块基本介绍
我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:
1.namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典

第5个貌似3.x版本的字典已经有setdefault方法支持了

详细介绍点这里
感谢 @戴宇轩 同学,提供的链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-21 13:59:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-21 14:41:38 | 显示全部楼层

回帖奖励 +2 鱼币

领鱼币~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-21 14:46:26 | 显示全部楼层

回帖奖励 +2 鱼币

我是来参观领鱼币的~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-21 14:51:28 | 显示全部楼层

这个确实 叼叼的~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-21 22:45:04 | 显示全部楼层

回帖奖励 +2 鱼币

新手领鱼币,另外说一句,各位大神能不能把代码写完整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-21 22:53:32 | 显示全部楼层
为伊无悔 发表于 2015-3-21 22:45
新手领鱼币,另外说一句,各位大神能不能把代码写完整

都是完整的代码,直接 checkio("Hello World!") 这样调用就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-22 00:00:50 | 显示全部楼层

回帖奖励 +2 鱼币

是来参观领鱼币的~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 06:41:26 | 显示全部楼层

回帖奖励 +2 鱼币

支持楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 11:51:04 | 显示全部楼层
挥舞乾坤 发表于 2015-3-21 22:53
都是完整的代码,直接 checkio("Hello World!") 这样调用就可以了

程序直接报错啊,我用的3.4版本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 12:21:43 | 显示全部楼层

回帖奖励 +2 鱼币

先领鱼币,回去研究以下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 12:32:47 | 显示全部楼层
拿鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 17:46:17 | 显示全部楼层

回帖奖励 +2 鱼币

学习了:funk:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-24 09:57:30 | 显示全部楼层
支持楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-27 10:21:11 | 显示全部楼层

回帖奖励 +2 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-27 10:31:49 | 显示全部楼层

回帖奖励 +2 鱼币

NB
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 15:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表