题目
编写一个程序,从键盘读取未指定个数的字符串,一行一个,以字符串"q"为输入结束标志("q"不列入统计范围)。使用字典找出其中出现次数最多的字符串,打印该字符串及其出现次数。
注意:本题的测试用例中将保证只有一个字符串出现次数最多。
输入格式:
字符串1
字符串2
...
字符串n
q
输出格式:
字符串 出现次数
输入样例:
abc
abc
bcd
xxx
q
输出样例:
abc 2
解题
题目代码:
js = {}
while True:
s = input()
if s == 'q':
break
js[s] = js.get(s,0) + 1 #若s不存在返回0
jg = []
for k,v in js.items():
jg.append([k,v])
jg.sort(key=lambda x:x[1],reverse = True) #通过v值进行排序
print(jg[0][0],jg[0][1])
代码解释:
代码先是创建了一个空字典用来接收用户输入的字符串
然后就是while死循环一直读入用户输入的字符串,直到收到q即退出循环
接着是通过字典的get函数对输入的字符串进行计数
跳出循环后再创建一个空列表为后面的操作做准备
然后就是for循环对items()方法进行解包,然后再通过append()方法以元组的形式加入列表
最后通过list.sort()进行逆排序,期间使用了lambda匿名函数,输出第一个元组的各元素
代码内相关内容解释:
get()方法
返回指定键的值,有两个参数,第一个参数是键名,第二个是默认值(键不存在返回该值),第二个参数省略是None
items()方法
dict.items()使dict中的键值对生成一个dict_items类型的数据,表现为一个元组,可以通过list()函数转换成列表
eg: {'a'=1,'b'=2}.items() -------> [(a,1),(b,2)]
lambda匿名函数
函数是匿名的,它们没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用,一般只有一行代码
lambda arguments: expression
arguments:是参数列表,个数大于等于0,必须在:前面给出
expression:是个表达式,用于计算返回函数的值
本题是给出参数列表x,返回x[1]的值用于sort()方法的逆排序
总结
本题代码要长一点,写的会复杂一点,使用了一些字典的方法以及lambda匿名函数,知识点挺丰富的,多理解理解就可以掌握了哦,加油学习python呢