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

标签 python

我有一些代码:

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/

相关文章:

python - jsonpickle/json函数输入utf-8,输出unicode?

python - 我在滥用 flush() 调用吗?

python - 无法从Python中的列表列表中删除字符串

python - 使用 print 语句在 Python 中显示变量值?

Python 如何从Basic Table获取Scrapy Xpath数据?

python - 递归函数名称错误

python - 使用 bash 或 python 或其他一些 linux 命令行工具创建一个 dovecot SHA1 摘要

python 完成后不会退出并释放 tty

python - 如何给 turtle 添加形状

python - Informix 连接速度 - Informatica PowerCenter 与 Python by JDBC