Python累加序列引用前一个自身值报错:'int' object is not subscriptable
解决累加序列时的下标访问错误问题
嘿,我来帮你搞定这个报错的问题~
首先得说清楚你为啥会遇到'int' object is not subscriptable这个错误:你一开始把b定义成了整数0,但后面循环里试图用b[i-1]去访问它的下标——整数类型根本没有下标这个属性呀,所以Python就报错啦。
接下来给你两种解决办法,任选其一都能实现你要的累加序列:
方法一:修正手动循环的写法
把b初始化成列表,并且第一个元素设为你要的初始值0,然后每次循环取列表的最后一个元素和当前a的元素累加,再追加到列表里:
# 假设a是Pandas Series(DataFrame的一列) import pandas as pd a = pd.Series([2,5,7,8,3,5,9]) b = [0] # 初始化列表,第一个元素为0 for num in a: next_val = b[-1] + num # 取b的最后一个元素累加当前数值 b.append(next_val) # 此时b的结果是 [0, 2, 7, 14, 22, 25, 30, 39]
方法二:用Pandas自带的累加函数(更高效)
如果你的a是DataFrame的列(Pandas Series),用cumsum()方法可以直接生成累加序列,再在开头插入初始值0就行,比手动循环高效得多,尤其是数据量大的时候:
import pandas as pd a = pd.Series([2,5,7,8,3,5,9]) # 方式1:用concat(Pandas 2.0+推荐,append已被标记为弃用) b = pd.concat([pd.Series([0]), a.cumsum()], ignore_index=True) # 方式2:用append(旧版本Pandas可用) # b = pd.Series([0]).append(a.cumsum(), ignore_index=True) # 最终b的结果和手动循环一致
核心问题就是初始化b的类型错误,换成列表或者Pandas Series就能正常访问元素啦~
内容的提问来源于stack exchange,提问作者helloworldlevel
相关产品推荐
相关产品推荐

