刷题笔记 | 经典算法题-统计数字

题目描述

某次科研调查时得到了 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 行( mn 个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

输入输出样例

示例 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()函数虽然可以处理所有可迭代的对象,例如集合、元组、数组,但是输出结果仍然是一个列表。所以如果返回的对象需要匹配输入类型,那么需要将转化为新类型。

posted @ 2022-12-15 09:55  不期而遇zlq  阅读(165)  评论(0)    收藏  举报