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

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

输入: 用于分析的文本 (str, unicode).

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

范例:

 get_max_value("Hello World!") == "l"
get_max_value("How do you do?") == "o"
get_max_value("One") == "e"
get_max_value("Oops!") == "o"
get_max_value("AAaooo!!!!") == "a"
get_max_value("abe") == "a"

如何使用: 对于大多数的解密任务,你需要知道各种字母出现在一段文字的频率。例如:如果我们知道在哪个字母出现的频率,我们可以很容易地破解一个简单的加法密码或替换密码。这是语言专家有趣的事情!

前提:密码只包含ASCII码符号 0 < len(text) ≤ 105

普通方法:

利用collections工具中的Counter,对列表中元素出现频率进行排序。Counter返回值是一个按元素出现频率降序排列的Counter对象,它是字典的子类,因此可以使用字典的方法。

 import re
from collections import Counter def get_max_value(text):
text = text.lower()
result = re.findall('[a-zA-Z]', text) # 去掉列表中的符号符
count = Counter(result) # Counter({'l': 3, 'o': 2, 'd': 1, 'h': 1, 'r': 1, 'e': 1, 'w': 1})
count_list = list(count.values())
max_value = max(count_list)
max_list = []
for k, v in count.items():
if v == max_value:
max_list.append(k)
max_list = sorted(max_list)
return max_list[0]

精简方法:

同样是使用Counter,但是通过列表推导式,可以使函数更加精炼。这就是列表推导式的好处。

 from collections import Counter

def get_max_value(text):
count = Counter([x for x in text.lower() if x.isalpha()])
m = max(count.values())
return sorted([x for (x, y) in count.items() if y == m])[0]

最佳方法:

不得不称赞这种方法,实在是干脆利落。它巧妙的使用了max()函数。

 import string

 def get_max_value(text):
text = text.lower()
return max(string.ascii_lowercase, key=text.count)

利用了max()函数的key参数,巧妙的将出现次数最多的字符提取出来。

 max(arg1, arg2, *args, *[, key=func]) -> value

我来为大家解释一下max(string.ascii_lowercase, key=text.count)这句代码的原理。

string.ascii_lowercase 等价于 'abcdefghijklmnopqrstuvwxyz' 而max()函数key参数的作用是:筛选符合key函数的返回值的最大值,如果有多个符合条件的值,则选取第一个。

max(range(6), key = lambda x : x>2)
>>> 3
# 带入key函数中,各个元素返回布尔值,相当于[False, False, False, True, True, True]
# key函数要求返回值为True,有多个符合的值,则挑选第一个。 max([3,5,2,1,4,3,0], key = lambda x : x)
>>> 5
# 带入key函数中,各个元素返回自身的值,最大的值为5,返回5. max('ah', 'bf', key=lambda x: x[1])
>>> 'ah'
# 带入key函数,各个字符串返回最后一个字符,其中'ah'的h要大于'bf'中的f,因此返回'ah' max('ah', 'bf', key=lambda x: x[0])
>>> 'bf'
# 带入key函数,各个字符串返回第一个字符,其中'bf'的b要大于'ah'中的a,因此返回'bf' max('abcdefghijklmnopqrstuvwxyz', key=text.count) # text = 'Hello World'
>>> 'l'
# 带入key函数,返回各个字符在'Hello World'中出现的次数,出现次数最多的字符为'l',因此输出'l'

这样大家就理解为什么通过max()函数的key参数就可以求得出现次数最多,且符合字母表排序的字符了吧!让我们再一次为写出该函数作者的脑洞点赞!

Python面试题 —— 计算列表中出现最多次的字符的更多相关文章

  1. python之使用heapq()函数计算列表中数值大小

    # heapq函数:计算列表最大几个值和最小几个值 # 语法:heapq.nlargest(n, list,[key]) # n表示最大或最小的几个: list为分析的对象: key为排序关键字,非必 ...

  2. Python面试题 —— 获取列表中位数

    中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位 ...

  3. Python面试题整理-更新中

    几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路 ...

  4. python练习题之计算字符串中所有字符得和

    第二题:计算字符串中所有数字的和1.字符串中只有小写字母和数字2.数字可能连续,也可能不连续3.连续数字要当做一个数处s='1234adg3g11's1 = "" for i in ...

  5. javascript计算字符串中出现最多的字符和个数

    代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t ...

  6. python 判断两个列表中相同和不同的元素

    背景: 在做接口自动化时,通常会判断接口返回中的数据信息,与数据库中返回的数据信息是否一致,比如:将接口返回信息的用户姓名存放到一个列表中,将数据库返回的用户姓名存放到另一个列表中,这时需要判断两个列 ...

  7. python 练习题:将列表中的大写字母转换成小写

    将列表中的大写字母转换成小写如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,L1 = ['Hello', 'World', 18, 'Apple', None]请修改列 ...

  8. 网上搜集python面试题(更新中......)

    武Sir博客拿的面试题,答案都是自己写的,多有不足,请多多指教.更新中...... 1.为什么学习Python? a.写起来快,看起来明白.作为通用性的语言,除了一些对性能要求很高的场合,几乎什么都能 ...

  9. [JS]计算字符串中出现最多的字符和其出现次数

    这是一道面试题 此处是利用Obj来解决的,当然不只此一种方法. //思路:遍历数组,拿到一个字符,并将之以 "字符":出现次数 的key:value形式存到对象中. //如果此字符 ...

随机推荐

  1. 好用的排名函数~ROW_NUMBER(),RANK(),DENSE_RANK() 三兄弟

    排名函数三兄弟,一看名字就知道,都是为了排名而生!但是各自有各自的特色!以下一个例子说明问题!(以下栗子没有使用Partition By 的关键字,整个结果集进行排序) RANK 每个值一个排名,同样 ...

  2. db2服务端安装图解

    一. 准备工作 1. db2服务端安装包,版本:10.1.2 二. 安装图解过程 1. 响应文件是一个包含安装和配置信息的纯英文文本文件.可无需任何用户交互进行db2的批量安装.非必须的. 2. 点击 ...

  3. android 滑动滚动条调节音量

    利用滚动条滑动控制音量: 定义: private SeekBar mseekBarvolume: 以下实现代码: //调节音量--begin------------------------- //音量 ...

  4. 系统进程 zygote(三)—— app_process 的 main 函数

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 首先: , , , ) < ) { // Older kernels don't understand ...

  5. Android ViewPager再探:增加滑动指示条

    上一篇:<Android ViewPager初探:让页面滑动起来> ViewPager只是左右滑动有些丑,也不知道当前位于第几页面. 可以在上方加入滑动指示条,来确定当前位置. 只需要修改 ...

  6. shell流程控制

    if语句 判断条件用[]包裹起来 if [ $a > $b ] then echo ‘a > b’ elif [ $a < $b ] then echo ‘a < b’ els ...

  7. C++浅析——虚函数的动态和静态绑定

    源自一道面试题,觉得很有意思 class CBase { public: virtual void PrintData(int nData = 111); }; void CBase::PrintDa ...

  8. jmeter的http sample使用

    1.jmeter最简单的http sample 使用 : 最简单的get请求, 输入服务器名称或者ip, 如果有路径则添加路径 ,带参数的添加具体的参数及values值 parameters 和 bo ...

  9. java 27 - 2 反射之 反射的概述以及获取Class文件对象的方式

    反射: JAVA语言的反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调 ...

  10. Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)

    原帖:http://www.cnblogs.com/nayitian/p/3231734.html wmsys.wm_concat Definition: The Oracle PL/SQL WM_C ...