Python中替换子列表内数值:将sigma元素低于阈值的替换为阈值
问题:替换列表中低于阈值的元素
需求
遍历二维列表sigma的每个子列表,将其中数值小于threshold_sigma的元素替换为threshold_sigma。
当前代码
import numpy as np km = [1, 2, 3, 4, 5] CI = [] sigma0=0.021 R=8.314 Temp=295 K=1.5e3 sigma=[] threshold_sigma=0.005 for t in range(0, 3): CI_t = [] sigma_t=[] alpha_t=[] Pr_cap_t=[] for i in range(0, len(km)): CI1 = 0.001 * (1 - np.exp(-km[i] * t)) CI_t.append(CI1) sigma1=sigma0-R*Temp*0.001*np.log(1+K*1.0*CI_t[i]) sigma_t.append(sigma1) CI.append(CI_t) sigma.append(sigma_t) print("sigma =",sigma)
当前输出
sigma = [[0.021, 0.021, 0.021, 0.021, 0.021], [-1.6146492190972785, -2.0186136083750714, -2.1519399869949933, -2.199220054620485, -2.2163866261027207], [-2.0186136083750714, -2.199220054620485, -2.222671745347101, -2.225828428605512, -2.2262553272687082]]
期望输出
sigma = [[0.021, 0.021, 0.021, 0.021, 0.021], [0.005, 0.005, 0.005, 0.005, 0.005], [0.005, 0.005, 0.005, 0.005, 0.005]]
解决方案
方法1:生成元素时直接处理(高效推荐)
在计算sigma1的同时,用max()函数确保结果不低于阈值,避免后续二次遍历:
import numpy as np km = [1, 2, 3, 4, 5] CI = [] sigma0=0.021 R=8.314 Temp=295 K=1.5e3 sigma=[] threshold_sigma=0.005 for t in range(0, 3): CI_t = [] sigma_t=[] alpha_t=[] Pr_cap_t=[] for i in range(0, len(km)): CI1 = 0.001 * (1 - np.exp(-km[i] * t)) CI_t.append(CI1) # 计算后直接取与阈值的最大值 sigma1 = max(sigma0 - R*Temp*0.001*np.log(1 + K*CI_t[i]), threshold_sigma) sigma_t.append(sigma1) CI.append(CI_t) sigma.append(sigma_t) print("sigma =",sigma)
方法2:生成列表后批量替换
如果已经生成了原始的sigma列表,可通过列表推导式遍历修改:
# 在原代码print前添加这段代码 for idx, sublist in enumerate(sigma): sigma[idx] = [max(num, threshold_sigma) for num in sublist] print("sigma =",sigma)
两种方法都能得到期望输出,方法1在生成数据时直接处理,执行效率更高;方法2适合已有现成列表的场景。
内容的提问来源于stack exchange,提问作者fromanidiot
相关产品推荐
相关产品推荐

