使用lambda、map、filter组合编程时结果不符的问题排查
问题排查:变量d和e结果不一致的原因
嘿,我一眼就看出问题啦——你把e里的函数嵌套顺序完全搞反了!咱们一步步拆解来看:
先理清楚变量d的执行流程
d是按以下步骤顺序执行的:
- 第一步
a:从numbers里过滤出大于3的元素 →[4,7,5,7,8,6] - 第二步
b:把a里的每个元素乘3 →[12,21,15,21,24,18] - 第三步
c:从b里过滤出大于10的元素(这里所有元素都满足,结果不变)→[12,21,15,21,24,18] - 第四步
d:把c里的每个元素乘2 →[24,42,30,42,48,36],这和你给出的正确结果一致。
再看变量e的错误流程
你写的e的嵌套顺序是从内到外执行的,实际流程变成了:
- 最内层:先把
numbers里的每个元素乘2 →[4,8,14,4,10,6,14,16,2,12] - 然后过滤出大于10的元素 →
[14,14,16,12] - 接着把这些元素乘3 →
[42,42,48,36] - 最后过滤出大于3的元素(结果不变)→ 这就是你看到的
e的结果。
明显和d的执行顺序完全颠倒了!
修正后的e代码
只需要把嵌套顺序调整成和d的步骤一致(过滤>3 → 乘3 → 过滤>10 → 乘2),修正后的代码如下:
e = list(map(lambda x : x * 2, filter(lambda x : x > 10, map(lambda x : x * 3, filter(lambda x : x > 3, numbers)))))
运行这个修正后的e,结果就会和d完全一致啦!
内容的提问来源于stack exchange,提问作者bhr
相关产品推荐
相关产品推荐

