鱼C论坛

 找回密码
 立即注册
查看: 2644|回复: 8

[技术交流] 一道组合数据类型应用上机题

[复制链接]
发表于 2017-12-9 10:13:07 | 显示全部楼层 |阅读模式

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

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

x
题目:
请编写一个程序,用于统计字符串中每个字母的出现次数(字母忽略大小写,a和A看作是同一个字母),统计出结果,请按照[‘a’:3,’b’:2]的格式输出。
我的思路:
这题我卡在了[‘a’:3,’b’:2]的格式输出,我第一反应就是使用字典,但是我发现这题没有这么简单,可能我字典还没有掌握的很好吧,我首先把key代表字母,value代表个数,建立了26个字母的字典,老师的要求是(字母忽略大小写,a和A看作是同一个字母),我第一反应就是用循环一个个去判断是不是26字母,例如if temp【i】 =='a':这样子的,但是想想这个方法太傻了要弄26个条分支,肯定不是这样的,后面我想到了先定义一个变量赋值大小写的26个字母,然后去判断是否有,后面我想到了大小写的问题,因为我在字典里的键设置的是小写字母,所以我定义变量让他等于索引得到的字母的小写形式,而且还可以利用他去改变字典里的值!出现一次就+1,最后在循环外打印出字典,但是直接打印出字典的话,整个字典都会出现,而老师意思应该是只打印出有个数的字母,这个问题我第一反应就是再创建一个空的字典,然后再将原有的字典每次键得到的值(包括键)赋值到空的字典里,结果是完美实现了,这题足足花了一个小时(但是我觉得很有成就感)。


我的代码:(大家先自己试着写写,然后发上来与我的进行对比,一起学习交流!

游客,如果您要查看本帖隐藏内容请回复
我想大家肯定有比我更好的方法更好的代码,请大家一起分享!一起成长!


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

使用道具 举报

发表于 2017-12-9 10:52:22 | 显示全部楼层
本帖最后由 shigure_takimi 于 2017-12-9 11:18 编辑
  1. from itertools import groupby
  2. def getCount(string):
  3.         string=sorted(string.lower())
  4.         result = []
  5.         for key,group in groupby(string):
  6.                 if key.isalpha():  #  不是字母不统计个数
  7.                         result.append(("'{}'".format(key))+":"+str(len(list(group))))
  8.         return '['+','.join(result)+']'
  9.        
  10. print(getCount('aaabbacc  11122ddadcd'))

  11. ##  前两天新学的。手机写的,对齐可能要调整。
  12. ##  输出结果:['a':5,'b':2,'c':3,'d':4]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-9 11:19:34 From FishC Mobile | 显示全部楼层
建议阅读collections中Counter。你会发现一句话就能搞定,原理是还是累积加一。手机回复,就不写代码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-9 12:23:58 | 显示全部楼层

试了一下的确可以实现,from itertools import groupby这是应用了什么,我现在只学到了字典,很多东西还不知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-9 12:25:59 | 显示全部楼层
bush牛 发表于 2017-12-9 11:19
建议阅读collections中Counter。你会发现一句话就能搞定,原理是还是累积加一。手机回复,就不写代码了

哇,谢谢分享,的确感觉简单了很多啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-9 12:43:44 | 显示全部楼层
bush牛 发表于 2017-12-9 11:19
建议阅读collections中Counter。你会发现一句话就能搞定,原理是还是累积加一。手机回复,就不写代码了

这是我阅读了collections中Counter后写的,发现这个写什么单词出现几个是非常方便的!很灵活!
  1. from collections import Counter

  2. def countLetter(temp):
  3.     cnt = Counter()
  4.     letter=temp.lower()
  5.     for word in letter:
  6.         cnt[word] += 1
  7.     print(dict(cnt))

  8. temp=input('请您输入:')
  9. countLetter(temp)
复制代码

但是问题来了,我怎么才能只显示26个字母呢?数字什么的不显示出来呢?



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

使用道具 举报

发表于 2017-12-9 20:40:37 | 显示全部楼层
像番茄加两个蛋 发表于 2017-12-9 12:43
这是我阅读了collections中Counter后写的,发现这个写什么单词出现几个是非常方便的!很灵活!
但是问题 ...

这是这个题目的:
  1. from collections import Counter
  2. print(dict(Counter('AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz456456456'.lower())))
复制代码

你说的不显示数字,不知道你想要的是不是这种样子。
  1. from collections import Counter
  2. s = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz456456456'.lower()
  3. lst = [i for i in s if i.isalpha()]
  4. print(dict(Counter(lst)))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-10 08:14:52 | 显示全部楼层
bush牛 发表于 2017-12-9 20:40
这是这个题目的:

你说的不显示数字,不知道你想要的是不是这种样子。

感激不尽,又让我学习到了!谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 09:54:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 19:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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