gpt4 book ai didi

python - 一行python中的if-else语句

转载 作者:太空宇宙 更新时间:2023-11-04 08:01:07 27 4
gpt4 key购买 nike

我有一些代码:

a_part = [2001, 12000]
b_part = [1001, 2000]
c_part = [11, 1000]
d_part = [1, 10]
data = range(1, 12000)
labels = [a_part, b_part, c_part, d_part]
sizes = []

# ---

for part in labels:
sum = 0
for each in data:
sum += each if each >= part[0] and each <= part[1] else 0
# error
# sum += each if each >= part[0] and each <= part[1]
sizes.append(sum)
print(sizes)

我将其重写为更 Pythonic:

sizes = [sum(x for x in data if low<=x<=high) for low,high in labels]
# error
# sizes = [sum(x for x in data if low<=x<=high else 0) for low else 0,high in labels]
print(sizes)

我发现在第一个代码片段中我不能遗漏 else 0 而第二个示例不能包含 else 0

else 0 在这些示例之间有什么区别?

最佳答案

这里有两个截然不同的东西。

首先你有一个表达式,并且使用了 conditional expression产生值(value);这需要 else,因为表达式总是需要产生东西

例如,如果您这样写:

sum += each if each >= part[0] and each <= part[1]  # removing "else 0"

如果测试为假,那么总和会增加多少?

在第二个你有一个generator expression ,并且 if 是可能部分的一部分(称为 comp_if in the grammar ),在(嵌套的)for 循环旁边。与 if ...: 语句类似,它过滤使用了序列中的哪些元素,并且在 false 情况下不需要产生值;否则你不会过滤。

将其带回到您的示例中:

sum(x for x in data if low<=x<=high)

if 测试为 false 时,x 只是从循环中省略而不求和。你会在第一个例子中做同样的事情:

if each >= part[0] and each <= part[1]:
# only add to `sum` if true
sum += each

关于python - 一行python中的if-else语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40038799/

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