Python中lambda调用后接方括号与字典推导式语法疑问
问题解答
咱们直接拆解你疑惑的那行代码:
new_policy_pie = lambda state: {state:action for state, action in enumerate(np.argmax(Q, axis=1))}[state]
末尾方括号的作用
- 先看大括号里的部分:
{state:action for state, action in enumerate(np.argmax(Q, axis=1))}是一个字典推导式,它会生成一个状态编号→最优动作的映射字典。其中:np.argmax(Q, axis=1)对Q矩阵的每一行(对应每个状态)取最大值的索引,也就是该状态下的最优动作;enumerate给每个最优动作配上对应的状态编号(从0开始的整数索引)。
- 后面的
[state]是字典的键索引操作——从刚生成的这个字典里,直接取出输入参数state对应的动作值,也就是当前状态的最优动作。
额外优化建议
这段代码的写法其实有冗余:每次调用这个lambda函数,都会重新生成一遍整个字典,完全没必要。更高效的写法是直接用np.argmax的结果数组索引:
new_policy_pie = lambda state: np.argmax(Q, axis=1)[state]
如果想进一步优化,可以提前把最优动作数组存下来,避免重复计算argmax:
optimal_actions = np.argmax(Q, axis=1) new_policy_pie = lambda state: optimal_actions[state]
内容的提问来源于stack exchange,提问作者CamWheeler135
相关产品推荐
相关产品推荐

