起因是看到一道面试题

“统计字符串中出现次数最多的字符,并返回出现次数”

问题很简单,刚开始没思路,只想到了循环统计,但是觉得太蠢了,直到我发现了max()的key用法,果然还是我之前学的太浅了~

s="zxcvbnmasdaasdafa"
max_s = max(s,key=s.count) # 返回出现次数最多的字符
s.count(max_s) # 返回次数

相关知识点:

max(iterable, *[, key, default])

官方文档是这么写,写的还是很详细:

返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。

如果只提供了一个位置参数,它必须是非空 iterable,返回可迭代对象中最大的元素;如果提供了两个及以上的位置参数,则返回最大的位置参数。

有两个可选只能用关键字的实参。key 实参指定排序函数用的参数,如传给 list.sort() 的。default 实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 default ,则会触发 ValueError。

如果有多个最大元素,则此函数将返回第一个找到的。这和其他稳定排序工具如 sorted(iterable, key=keyfunc, reverse=True)[0] 和 heapq.nlargest(1, iterable, key=keyfunc) 保持一致。

3.4 新版功能: keyword-only 实参 default 。

在 3.8 版更改: key 可以为 None。

max(s,key=s.count)

key接受一个函数对象,引用s.count函数,s中的每一个字符均会传入s.count(sub, start= 0,end=len(string))函数,并对所有字符的计算结果进行max()计算。



P.S.这种解法有个不太好的地方,如果有两个字符出现的次数一样,仅能返回第一个找到的字符

s = "asdf zxcva12q awww"

只会返回"a",但是其实"w"和"a"出现的次数一样,都是3

还有另一种解法

利用colletions模块

from collections import Counter
c = Counter(s)
c.most_common() # 输出为 [('a', 3), ('w', 3), (' ', 2), ('s', 1), ('d', 1), ('f', 1), ('z', 1), ('x', 1), ('c', 1), ('v', 1), ('1', 1), ('2', 1),('q', 1)]

结果是按出现次数顺序排列的列表

具体就不说了,colletions太强大了,说起来还是很多点的,有机会再细看

最新文章

  1. kvm初试0
  2. S2---深入.NET平台和C#编程的完美总结
  3. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 所有的基础数据都可以恢复删除
  4. postgresql修炼之道学习笔记(2)
  5. Java提高篇(二六)-----hashCode
  6. 李洪强 - C语言8-Scanf函数
  7. C函数及指针学习1
  8. (C/C++) 基础问答题
  9. Springmvc构造RESTful详细讲解
  10. wp8模拟器中使用电脑键盘和模拟器的版本解释
  11. eclipse如何修改android工程的包名?
  12. 基于C/S 结构的IM即时通讯软件--下篇
  13. Nginx详解十六:Nginx场景实践篇之缓存服务
  14. sns.pairplot
  15. gentoo samba 配置
  16. scp 免密登录ssh-copy-id 如何使用非22端口 + rsync 同步远程机器的文件到本地
  17. 洛谷P4172 [WC2006]水管局长 (LCT,最小生成树)
  18. Python3基础 super 子类调用父类的__init__
  19. centos solr4.5 tomcat 简单安装[已测试ok]
  20. csv的文件excel打开长数字后面位变0的解决方法

热门文章

  1. 删除启动台(LaunchPad)残留的图标
  2. java 注解基础
  3. 3dsmax+vray5进行分布式渲染
  4. fread()函数读文本文件重复读最后一个字符问题【已解决】
  5. [746] Interlude Update 3
  6. #pragma 小节
  7. 原生js创建节点,添加节点,删除节点
  8. 【ubuntu20】解压文件
  9. 求助:我需要用Python中parsel模块提取文章的文本内容,有什么办法
  10. vue 添加代理