Python实现列表从第二个元素开始迭代减法及报错修复
解决列表元素对应相减的错误及实现方案
错误原因分析
你遇到的TypeError: 'builtin_function_or_method' object is not subscriptable是因为错误调用了len函数:代码里写的len["b"]是下标访问语法,但len是Python内置函数,必须用括号包裹参数,正确写法是len(b)。
另外,原代码还存在索引越界的问题:当x取到len(b)-1(即4)时,a[x+1]就是a[5],超出了列表a的索引范围(a的最大索引是4),会触发IndexError。
实现方案
方案1:生成包含NaN的结果(与b长度一致)
使用numpy实现:
import numpy as np a = [1,3,5,10,15] b = [2,4,9,12,19] # 初始化长度与b相同的数组,默认填充NaN c = np.full(len(b), np.nan) # 仅遍历a能覆盖的范围(a从第2个元素开始共4个元素,对应b的前4个元素) for x in range(len(a)-1): c[x] = a[x+1] - b[x] print(c) # 输出:[ 1. 1. 1. 3. nan]
纯Python实现:
a = [1,3,5,10,15] b = [2,4,9,12,19] c = [] for x in range(len(b)): if x + 1 < len(a): c.append(a[x+1] - b[x]) else: c.append(float('nan')) print(c) # 输出:[1, 1, 1, 3, nan]
方案2:生成无NaN的结果(仅保留有效计算项)
使用numpy实现:
import numpy as np a = [1,3,5,10,15] b = [2,4,9,12,19] # 取a的第2个元素到末尾,与b的前len(a)-1个元素对应相减 c = np.array(a[1:]) - np.array(b[:len(a)-1]) print(c.tolist()) # 输出:[1, 1, 1, 3]
纯Python实现(列表推导式):
a = [1,3,5,10,15] b = [2,4,9,12,19] c = [a[i+1] - b[i] for i in range(len(a)-1)] print(c) # 输出:[1, 1, 1, 3]
内容的提问来源于stack exchange,提问作者Shu
相关产品推荐
相关产品推荐

