如何用Python列表推导式替代循环生成指定序列
解决列表推导式生成目标序列的问题
错误原因分析
你尝试的列表推导式会触发索引越界,因为推导过程中变量j被重新赋值为新生成的列表,而每个元素的计算依赖j[i-1]——此时新列表还在构建中,没有足够的元素供引用,因此报错。
方案一:利用序列的数学规律(最简洁)
观察目标序列[0,2,6,12,20,30,42,56,72,90],可发现每个元素满足公式:第n个元素(从0开始计数)= n(n+1)*。基于此规律,直接用列表推导式生成:
sequence = [n * (n + 1) for n in range(10)]
执行后即可得到目标序列,无需依赖前序元素的累加计算。
方案二:模拟原循环的累积逻辑
如果需要严格遵循原循环的累加逻辑,可以借助itertools.accumulate实现累积计算,再补充初始的0:
import itertools # 生成原循环中每次累加的2*i值 add_values = (2 * i for i in range(1, 10)) # 计算累积和,拼接初始0得到完整序列 sequence = [0] + list(itertools.accumulate(add_values))
这种方式完全复刻了原循环中j += 2*i的累加过程,最终生成的序列与原循环输出一致。
内容的提问来源于stack exchange,提问作者Raphael Von Eigendorf
相关产品推荐
相关产品推荐

