如何将生成指定列表的循环代码转换为Python列表推导式?
解决方法
原循环的核心逻辑是生成一个累加序列:初始值为0,之后依次累加2、4、6…直到18(最后一次循环中,先append累加后的结果90,再加上20,循环结束),最终得到列表0, 2, 6, 12, 20, 30, 42, 56, 72, 90。
方法一:利用数学公式简化
观察列表元素的规律:
- 第1个元素:
0 = 0 × 1 - 第2个元素:
2 = 1 × 2 - 第3个元素:
6 = 2 × 3 - ...
- 第10个元素:
90 = 9 × 10
可见每个元素都是n × (n+1),其中n从0到9。直接用列表推导式实现:
x = [n * (n + 1) for n in range(10)]
方法二:用海象运算符模拟累加过程(Python 3.8+)
如果不想依赖数学规律,也可以用海象运算符在列表推导式中维护累加状态,完全模拟原循环逻辑:
y = 0 x = [temp for i in range(2, 21, 2) if (temp := y, y := y + i)[0] or True]
这里的逻辑是:每次循环先把当前的y赋值给temp(要append的元素),再更新y的值,最后返回temp作为列表元素。
验证结果
两种方法运行后都能得到目标列表:[0, 2, 6, 12, 20, 30, 42, 56, 72, 90]
内容的提问来源于stack exchange,提问作者AColoredReptile
相关产品推荐
相关产品推荐

