Python掷骰子计数作业代码如何优化效率与简化实现?
首先说下原有代码存在的可优化空间:
- 循环内反复调用
count()、remove()方法,每次都要完整遍历列表,数据量变大后效率会明显降低 - 过程中直接修改了原始掷骰结果列表,若后续需要复用原始数据会受影响
- 补0插入的逻辑比较绕,可读性不高
下面给两种优化实现,都完全符合输出要求:
方案1:用标准库Counter实现,代码最简洁
Counter是Python专门做频次统计的工具,逻辑极简:
from random import randint from collections import Counter # 生成10次掷骰结果 rolls = [randint(1, 6) for _ in range(10)] # 直接统计每个点数的出现次数 count_result = Counter(rolls) # 按要求输出 print(f"Your rolls: {rolls}") print("Number of rolls:") for num in range(1, 7): # 没出现的点数默认返回0 print(f"{num} -> {count_result.get(num, 0)}")
方案2:纯基础列表实现,无额外依赖,效率最高
如果作业要求不能用collections模块,用这个版本,只需要遍历一次掷骰结果就能完成统计,时间复杂度O(n):
from random import randint # 生成10次掷骰结果 rolls = [randint(1, 6) for _ in range(10)] # 初始化长度为6的计数列表,索引0对应点数1的次数,初始全为0 roll_count = [0] * 6 # 单次遍历完成统计 for num in rolls: roll_count[num - 1] += 1 # 按要求输出 print(f"Your rolls: {rolls}") print("Number of rolls:") for num in range(1, 7): print(f"{num} -> {roll_count[num - 1]}")
两种优化方案都保留了原始的掷骰结果列表,逻辑更清晰,执行效率远高于原有实现,哪怕后续需要模拟上万次掷骰也能快速完成。
内容的提问来源于stack exchange,提问作者João Pedro Checco
相关产品推荐
相关产品推荐

