Python用for循环替换列表元素出错,仅保留最后值求排查
循环逻辑错误排查与修正
错误原因
你的嵌套循环逻辑完全搞反了:
- 处理
y时,外层循环遍历每个列表索引a,内层循环又遍历xx的所有元素,每次都把y[a]赋值为当前元素的对数。内层循环跑完后,y[a]只会保留最后一个元素的对数值,所有索引位置都重复这个操作,最终整个y列表全是xx最后一个元素的对数。 - 处理
x的逻辑同理,每个x[b]被xx的所有元素依次覆盖,最后只剩xx的最后一个值。
修正代码(方案一:单循环对应赋值)
如果坚持要基于初始填充0的列表修改,用单循环对应索引即可,不需要嵌套:
import numpy as np x = [0] * 101 # 直接生成101个0的列表,替代原循环append y = [0] * 101 xx = np.linspace(1, 10, 101) print(xx) # 单循环遍历索引,对应赋值 for idx in range(len(xx)): x[idx] = xx[idx] y[idx] = np.log(xx[idx]) print(x) print(" ") print(y)
更简洁的实现(方案二:列表推导/类型转换)
完全可以跳过初始填充0的步骤,直接生成目标列表:
import numpy as np xx = np.linspace(1, 10, 101) print(xx) x = list(xx) # numpy数组直接转Python列表 y = [np.log(num) for num in xx] # 列表推导式生成对数列表 print(x) print(" ") print(y)
内容的提问来源于stack exchange,提问作者Aditya Singh
相关产品推荐
相关产品推荐

