gpt4 book ai didi

python - 具有嵌套 if/else 条件的一个衬垫

转载 作者:行者123 更新时间:2023-12-03 20:50:13 25 4
gpt4 key购买 nike

这里是真正的 python 菜鸟,我对这个嵌套 if/else 单行代码的结果感到有点困惑:

>>> num_arr = [5, 10, 15]
>>> [i**2 if i == 10 else i-5 if i < 7 else i+5 for i in num_arr]
[0, 100, 20]

由于 10 大于 7,结果不应该是 [0, 15, 20] 吗?

最佳答案

正如我在评论中提到的,“正确”版本(注意括号)是:

[(i**2 if i == 10 else i-5) if i < 7 else i+5 for i in num_arr]

您的“问题”源于您的 if 的链接语句,按照英文阅读顺序(从左到右)执行。所以它是这样写的:

[i**2 if i == 10 else (i-5 if i < 7 else i+5) for i in num_arr]
  • 哪里 i=5 , i != 10在“第一个表达式”中,因此您移动到 ​​else ;哪里i < 7所以你得到i-5 ,或0
  • 哪里 i=10 , i == 10所以你得到i**2 ,或100
  • 哪里 i=15 , i != 10所以你移动到else ,其中i 小于7 ,所以你得到i+5 ,或20

From the documentation:

To make the semantics very clear, a list comprehension is equivalent to the following Python code:

for expr1 in sequence1:
for expr2 in sequence2:
...
for exprN in sequenceN:
if (condition):
# Append the value of
# the expression to the
# resulting list.

这意味着你的看起来像:

[[expr1] if [condition] else [[expr2] if [condition] else [expr3]] for ...]

关于python - 具有嵌套 if/else 条件的一个衬垫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61071419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com