列表推导式多条件判断疑问:为何1变3、2不变、3变6?
解析Python列表推导式的多条件逻辑问题
我在学习Python列表推导式时,了解到可在其中添加多个条件判断。我无法理解当前运行结果的逻辑:为何元素1变为3、元素2保持2、元素3变为6?
对应的代码:
a = [x if x % 2 == 0 else x * 2 if x % 3 == 0 else x * 3 for x in range(1, 11)]
运行输出:
[3, 2, 6, 4, 15, 6, 21, 8, 18, 10]
逻辑拆解
这个列表推导式本质是嵌套的三元表达式,判断顺序从左到右优先级依次降低,等价于下面的普通循环代码:
a = [] for x in range(1, 11): if x % 2 == 0: a.append(x) else: if x % 3 == 0: a.append(x * 2) else: a.append(x * 3)
逐个分析你疑惑的几个元素:
- x=1:1除以2余1(不满足
x%2==0),1除以3余1(也不满足x%3==0),所以执行最后一个分支x*3,得到1*3=3; - x=2:2除以2余0(满足第一个条件
x%2==0),直接取x本身,结果为2; - x=3:3除以2余1(不满足第一个条件),但3除以3余0(满足第二个条件
x%3==0),所以执行x*2,得到3*2=6;
你可以对照这个逻辑,逐个验证输出列表里的其他元素,就能完全理解整个推导式的执行顺序了。
内容的提问来源于stack exchange,提问作者Lumos
相关产品推荐
相关产品推荐

