如何将双骰子掷点求和的for循环改写为Python列表推导式
解答
完全可以通过列表推导式实现这段逻辑,改写后的代码和原for循环执行效果完全一致,写法更简洁。
原代码的核心逻辑是固定循环1000次,每次计算两个骰子的掷骰结果之和,再把结果存入列表,这个流程刚好匹配列表推导式“遍历可迭代对象、按规则生成元素、自动收集为列表”的特性。
改写代码
#Make some rolls, and store the results in a list. #die_1 & die_2 represent D6 dices, .roll() is a .choice() generated from import random results = [die_1.roll() + die_2.roll() for roll_num in range(1_000)]
补充说明
- 原循环里的
roll_num仅用于控制循环次数,没有参与实际的数值计算,在列表推导式里可以直接保留这个写法,不需要额外定义中间变量存储单次求和结果,推导式会自动把每次计算的和按顺序加入最终列表。 - Python里对于明确不会使用的循环临时变量,惯例是用下划线
_代替,写法更简洁,也能让读代码的人一眼看出这个循环只是为了执行固定次数的重复操作,不需要用到循环计数:
# 用下划线替代未使用的循环变量,符合Python编码惯例 results = [die_1.roll() + die_2.roll() for _ in range(1_000)]
内容的提问来源于stack exchange,提问作者404rorre
相关产品推荐
相关产品推荐

