Skip to main content
 首页 » 编程设计

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

2025年05月04日13soundcode

我有一些代码:

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