Python如何将字典放在for循环外遍历列表元素代入公式计算
你遇到的问题本质是Python的表达式会立即求值:你把计算公式直接作为字典的值时,定义字典的瞬间就会用当前作用域的x值算出固定结果存储,不会等到你循环取值时再动态计算。你把字典放到循环内可以得到正确结果,是因为每次循环都会用当前的x重新计算表达式的值。
解决方案
如果要把字典定义在循环外,只需把字典的value改为可调用的函数,延迟计算逻辑到循环取值时再执行即可,最简便的方式是用lambda匿名函数实现:
# 不要用list作为变量名,list是Python内置关键字,重名会引发后续问题 num_list = [1,2,3,4,5] # 字典值定义为接收x参数的lambda函数,定义时不会立即计算结果 d = { "equation1": lambda x: 2*x + 3, "equation2": lambda x: 3 + 4*x } for x in num_list: # 调用函数传入当前循环的x值,动态计算结果 y = d["equation1"](x) print(y)
运行后输出结果和你把字典放在循环内的效果完全一致:
5 7 9 11 13
如果你的计算逻辑比较复杂,不适合用单行的lambda实现,也可以提前用def定义普通函数,再把函数作为值存入字典即可,调用方式和上面的示例完全相同。
内容的提问来源于stack exchange,提问作者divko
相关产品推荐
相关产品推荐

