如何在while循环中统计列表内状态的出现次数并获取Top3
问题描述
给定变量:
a = [(1,10),(2,20),(3,30),(4,10),(6,10),(7,20),(8,30)]
每个元组的第一个元素是id,第二个是status。需要统计每个status的出现次数,并获取出现次数最多的前3个(预期结果:10=3,20=2,30=2)。
现有如下while循环仅能打印status,需修改以完成统计需求:
x = 0 while (x< len(a)): print(a[x][1]) x+=1
解决方案
1. 在while循环中统计status次数
使用字典存储每个status的计数,遍历过程中更新字典值:
a = [(1,10),(2,20),(3,30),(4,10),(6,10),(7,20),(8,30)] status_count = {} x = 0 while x < len(a): status = a[x][1] # 若status已在字典中则计数+1,否则初始化为1 if status in status_count: status_count[status] += 1 else: status_count[status] = 1 x += 1
2. 获取出现次数最多的前3个status
通过sorted()函数按次数降序排序字典项,再截取前3个结果:
# 按次数降序排序,key指定取元组的第二个元素(即计数) sorted_status = sorted(status_count.items(), key=lambda item: item[1], reverse=True) top_3 = sorted_status[:3] # 打印最终结果 print("出现次数最多的前3个status:") for status, count in top_3: print(f"{status}={count}")
完整代码
a = [(1,10),(2,20),(3,30),(4,10),(6,10),(7,20),(8,30)] status_count = {} x = 0 while x < len(a): status = a[x][1] if status in status_count: status_count[status] += 1 else: status_count[status] = 1 x += 1 sorted_status = sorted(status_count.items(), key=lambda item: item[1], reverse=True) top_3 = sorted_status[:3] print("出现次数最多的前3个status:") for status, count in top_3: print(f"{status}={count}")
运行后输出:
出现次数最多的前3个status: 10=3 20=2 30=2
内容的提问来源于stack exchange,提问作者code_wizard3199
相关产品推荐
相关产品推荐

