给定公司 n 名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。
输入格式:
输入首先给出正整数 n(≤105),即员工总人数;随后给出 n 个整数,即每个员工的工龄,范围在 [0, 50]。
输出格式:
按工龄的递增顺序输出每个工龄的员工个数,格式为:"工龄:人数"。每项占一行。如果人数为 0 则不输出该项。
这是一开始的错误答案:
python
n=int(input())
m=list(map(int,input().split()))
m.sort()
for i in m:
total=0
if i==i:
total+=1
m1=set(m)
print(f'{m1}:{total}')
输出是{0, 2, 5, 7, 10}:1。
主要问题
-
total放在循环内,每次都被重置为 0 → 最后 total 只等于 1 -
if i == i永远成立,没意义 -
m1 = set(m)每次循环都重复计算,浪费 -
最后输出时,
total是最后一次循环的值(1),不是总次数 -
输出格式是
{集合}:{1},不是想要的统计结果
所以重新运用字典进行:
python
n=int(input())
m=list(map(int,input().split()))
m.sort()
total={}
for i in m:
if i in total:
total[i]+=1
else:
total[i]=1
for r,j in total.items():
print(f'{r}:{j}')
items() 是字典(dict) 的方法,作用是返回字典中所有的键-值对 ,每个键值对是一个元组 (键, 值)。
字典是动态的,循环每执行一次,就往里加一个键(如果新数)或更新值(如果重复)。
-
如果遇到新数,就新建键值对
-
如果遇到重复,就更新值
total.items() 每次返回一个元组,比如 (1, 1),然后:
-
元组的第一个元素(键)赋给变量
r -
元组的第二个元素(值)赋给变量
j