刷题笔记 | 经典算法题-统计数字
题目描述
某次科研调查时得到了 n 个自然数,每个数均不超过 \(1.5 \leq 10^9\)。已知不相同的数不超过 \(10^4\)个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入描述
第 1 行是整数 n,表示自然数的个数。
第 2 ~ n+1行每行一个自然数。
其中,\(1 \leq n \leq 2 \times 10^5\),每个数均不超过 \(1.5 \leq 10^9\)。
输出描述
输出 m 行( m 为 n 个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
输入输出样例
示例 1
输入
8
2
4
2
4
5
100
2
100
输出
2 3
4 2
5 1
100 2
python代码实现:
import os
import sys
# 请在此输入您的代码
n = int(input())
d = {}
for i in range(n):
p = int(input())
# get()获取字典中的元素,若键p的值为空,则返回0+1
d[p] = d.get(p, 0) + 1
# items()获取字典中的键值对
for x, y in sorted(d.items()):
#加f表示格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式
print(f'{x} {y}')
刷题知识点:
1、python字典中get()函数的用法
(1)get()函数利用键来获取值
之前在学习python的时候,在获取值得时候常用的方法就是直接
print(dict[key])
但这种方法中当字典中不存在该键时会返回KeyError类型错误,此时就可以用get()函数还利用键获取值
print(dict.get(key))
利用get()函数操作时当字典中不存在输入的键时会返回一个None,这样程序运行时就不会出异常
(2)利用字典统计列表中元素出现次数
比如现在有这么一个列表,让你统计列表中部分元素出现的次数
ls=['aa','b','c','ddd','aa']
统计列表中每个元素出现次数:
cou={} #创建一个空字典
for i in ls:
cou[i]=cou.get(i,0)+1 #之后称其为get的赋值语句,目的是新建字典键值对
'''
赋值语句代码等价于
cou[i]=0
cou[i}=cou[i]+1
'''
print(cou)
输出结果:
{'aa': 2, 'b': 1, 'c': 1, 'ddd': 1}
get()函数在这里有两个参数,第一个是确定要分配值的键,第二个是拟定给键分配一个初值,但实际要给键赋值仍需要get赋值语句。
2、Python中的排序函数--sorted()函数
sorted()函数可以对所有可迭代的对象进行排序操作。sorted()函数提供了一个新的有序的输出结果,并且不改变原始值的顺序。
其中参数说明:
-
iterable:可迭代对象
-
key:通过这个参数可以自定义排序逻辑
-
reverse:指定排序规则,True为降序,False为升序(默认)。
sorted()函数返回重新排序的列表,与sort()函数的区别在于sort()函数是list列表中的函数,而sorted()函数可以对所有可迭代对象进行排序操作。并且用sort()函数对列表排序时会影响列表本身,而sorted()函数则不会。
需要注意的是,sorted()函数虽然可以处理所有可迭代的对象,例如集合、元组、数组,但是输出结果仍然是一个列表。所以如果返回的对象需要匹配输入类型,那么需要将转化为新类型。


浙公网安备 33010602011771号