python中的for循环和if语句
我被下面的代码弄糊涂了。它们看起来相似,但工作方式不同 我能理解为什么第一个有效。有人能解释一下为什么其他人工作或不工作吗?非常感谢python中的for循环和if语句,python,for-loop,if-statement,Python,For Loop,If Statement,我被下面的代码弄糊涂了。它们看起来相似,但工作方式不同 我能理解为什么第一个有效。有人能解释一下为什么其他人工作或不工作吗?非常感谢 print([x for x in range(1, 11) if x % 2 == 0]) # This works print([x if x % 2 == 0 else 0 for x in range(1, 11)]) # This works print([x for x in range(1, 11) if x % 2 == 0 else 0])
print([x for x in range(1, 11) if x % 2 == 0]) # This works
print([x if x % 2 == 0 else 0 for x in range(1, 11)]) # This works
print([x for x in range(1, 11) if x % 2 == 0 else 0]) # Not work
print([x if x % 2 == 0 for x in range(1, 11)]) # Not work
print([x if x % 2 == 0 else -x for x in range(1, 11)]) # This works
列表末尾的if子句是的一部分,用于过滤元素。使用else是没有意义的,因为它实际上只是一个谓词,用于指定是否包含元素
列表第一部分中的if是理解的一部分。它必须有一个else才能在语法上有效,但它不是一个过滤器:它不是用于从理解中排除元素,而是用于根据条件指定不同的值。我认为,如果您逐段构建表达式,最容易理解
>>> [
x
for x in range(1, 11)
]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
这是最简单的形式。我们在1,11范围内每取一个x。进入列表的是x本身
现在我们在迭代x的完全相同的值,但我们并不是简单地把x放入理解中。相反,如果x%2==0,则进入列表的是x,否则为0。我们仍然有相同数量的值,如前一个示例中所示,但现在所有的赔率值都已转换为0
>>> [
x
for x in range(1, 11)
if x % 2 == 0
]
[2, 4, 6, 8, 10]
现在我们回到了在理解结果中加入x,但是我们已经从迭代中删除了其他x。请注意,if位于for…in部分后面的表达式末尾,它唯一的功能是过滤x在表达式开头接收的值,它不能用其他值替换它们,只能包含或排除它们。这就是为什么我们现在有一半的价值观
我们不能在最后向筛选器表达式添加else,因为条件的作用已经定义;没有代码块可执行,也没有其他可替代的方法。if包含此值,else不包含此值
类似地,如果我们在表达式开头使用if,则必须包含else,以指定如果条件不为true,该值将变成什么。为什么说最后一个不起作用?@Samwise第一个是引用。最后一个不会产生相同的结果。所以它不起作用。虽然倒数第二个也不起作用,尽管它声称可以。但是倒数第二个产生了不同的结果,它说这是有效的。在文档中称为a。末尾的if称为if子句。
>>> [
x
for x in range(1, 11)
if x % 2 == 0
]
[2, 4, 6, 8, 10]