Python中创建嵌套列表的技术实现——金融计算器场景
看起来你已经搞定了单次模拟的结果收集逻辑,现在要扩展成多次模拟并把每次的结果列表存到simulations里对吧?我给你整理了一套清晰的实现方案,兼顾可读性和避免常见的引用坑:
实现多次金融模拟的结果收集
核心思路
在外层循环中控制模拟总次数,每次循环内完成:
- 通过
modify()函数随机化通胀率和利率,保证每次模拟的参数不同 - 执行单次模拟,生成该次的
results列表 - 将
results的副本存入simulations(直接存原列表会导致后续修改影响已存结果,因为列表是引用类型) - 重置
results(或者直接在每次循环开头重新初始化)
代码示例(结构化版本)
把单次模拟和多次模拟的逻辑拆分,更易维护:
import random def modify(): # 这里是你的随机化通胀率、利率的逻辑,示例用随机范围生成 inflation_rate = random.uniform(0.02, 0.05) # 2%-5%的通胀率 interest_rate = random.uniform(0.03, 0.06) # 3%-6%的利率 return inflation_rate, interest_rate def run_single_simulation(): # 单次模拟:生成本次的results列表 results = [] infl_rate, int_rate = modify() # 每次模拟调用modify获取新参数 # 这里替换成你原本的循环生成结果的逻辑,示例按年份计算现值 for year in range(1, 11): present_value = 5000 / ((1 + infl_rate) ** year) * ((1 + int_rate) ** year) results.append(round(present_value, 2)) return results def run_multiple_simulations(total_sims): simulations = [] for _ in range(total_sims): single_results = run_single_simulation() # 存入副本,避免后续修改影响已保存的结果 simulations.append(single_results.copy()) return simulations # 测试:运行10次模拟 if __name__ == "__main__": sim_count = 10 all_simulations = run_multiple_simulations(sim_count) print(f"完成{len(all_simulations)}次模拟") print("第一次模拟的结果:", all_simulations[0]) print("第十次模拟的结果:", all_simulations[-1])
简化版(不拆分函数)
如果你的代码更紧凑,也可以直接写在主逻辑里:
import random def modify(): return random.uniform(0.02, 0.05), random.uniform(0.03, 0.06) # 输入模拟次数 sims = 10 simulations = [] for _ in range(sims): results = [] # 每次循环重新初始化results,自动完成重置 infl_rate, int_rate = modify() # 你的单次循环逻辑,示例生成10个结果 for i in range(10): result = (i+1) * (int_rate - infl_rate) + 100 results.append(round(result, 2)) simulations.append(results.copy()) # 存入副本 # 验证结果 print(f"模拟列表长度:{len(simulations)}") print("第二次模拟的结果:", simulations[1])
关键注意点
- 必须存列表副本:如果直接写
simulations.append(results),所有存入的元素都会指向同一个列表对象,后续循环修改results时,之前存入的结果也会跟着变。用results.copy()或者list(results)就能生成独立的副本。 - 每次模拟调用modify:确保每次循环都调用
modify()获取新的随机参数,这样每次的results才会不同。
内容的提问来源于stack exchange,提问作者True Debreuil
相关产品推荐
相关产品推荐

