我有一些代码:
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/