如何用Python列表推导式实现三角数递增列表的逐行输出?
解决方法
要实现原for循环的逐行递增输出,你需要生成每个阶段的前缀列表,而不是仅生成完整的三角数列表。以下是两种用列表推导式实现的方案:
方案一:先生成完整列表,再生成前缀切片打印
# 先生成所有三角数的完整列表 tri_nums = [i*(i+1)//2 for i in range(1, 10)] # 生成每个长度的前缀列表并逐行打印 for lst in [tri_nums[:k] for k in range(1, 10)]: print(lst)
方案二:嵌套列表推导式直接生成所有前缀列表
# 外层循环控制列表长度,内层生成对应长度的三角数列表 for lst in [[j*(j+1)//2 for j in range(1, i+1)] for i in range(1, 10)]: print(lst)
原理说明
原for循环的核心是:每添加一个新的三角数,就打印当前的完整列表(即前i个三角数的集合)。上面的方案中:
- 方案一先一次性生成所有三角数,再通过切片
tri_nums[:k]获取前k个元素的列表,遍历k从1到9即可输出所有阶段的列表。 - 方案二通过嵌套列表推导式,直接为每个i生成前i个三角数的列表,再逐个打印。
两种方案都能输出和原for循环完全一致的结果:
[1] [1, 3] [1, 3, 6] [1, 3, 6, 10] [1, 3, 6, 10, 15] [1, 3, 6, 10, 15, 21] [1, 3, 6, 10, 15, 21, 28] [1, 3, 6, 10, 15, 21, 28, 36] [1, 3, 6, 10, 15, 21, 28, 36, 45]
内容的提问来源于stack exchange,提问作者Schmied
相关产品推荐
相关产品推荐

