提问人:Alk 提问时间:12/25/2021 更新时间:12/25/2021 访问量:165
Python 速记 If - 0 在计算结果中被解释为 false
Python Shorthand If - 0 interpreted as false in calculation result
问:
for i in range(0,len(A) - 1):
cand = (A[i] + A[i + 1]) / 2
cand2 = i + 2 < len(A) and (A[i] + A[i + 1] + A[i + 2]) / 3 or cand
A[i] = min(cand, cand2)
我编写了上面的代码来计算整数数组接下来的两个和三个元素的最小平均值。例如,如果我们有数组,在第一次迭代中将 be 和 will be so 将更新为 等等。[2,3,5,6]
cand
2.5
cand2
3.33
A[0]
2.5
此代码有效,除非是 .在本例中,语句将执行并设置为 。(A[i] + A[i + 1] + A[i + 2]) / 3
0
or
cand2
cand
我很确定这是因为 Python 解释 as 并执行语句 - 我该如何解决这个问题?0
False
or
答:
2赞
Talon
12/25/2021
#1
如果在这里,您似乎想做一个三元,它会像这样工作:
for i in range(0,len(A) - 1):
cand = (A[i] + A[i + 1]) / 2
cand2 = (A[i] + A[i + 1] + A[i + 2]) / 3 if i + 2 < len(A) else cand
A[i] = min(cand, cand2)
你用布尔运算符链接它们,这也许可以工作,因为在 python 中,它们会做一些技巧(-chained 表达式将返回链的第一个 Falsy 值,或者如果所有值都是 Truthy - - - 一个 -chained 表达式将返回第一个 Truthy 值或值,如果所有值都是 Falsy),但这会使你的程序更难理解。and
or
无论如何,您可能需要考虑在此处使用常规结构以获得最佳可读性。if
- if 分支应该是最有可能的分支。
- 不要使用嵌套的三元运算符(如果 ...埃利夫>......然后。。。语句)。
- 不要对复杂的表达式使用长三元运算符(再次使用多行 if 语句)。
for i in range(0,len(A) - 1):
cand = (A[i] + A[i + 1]) / 2
if i + 2 < len(A):
cand2 = (A[i] + A[i + 1] + A[i + 2]) / 3
else:
cand2 = cand
A[i] = min(cand, cand2)
评论
0
<true-value> if <contition> else <false-value>
and
or