Python 理解顺序条件句的行为
不知何故,我在Python中做到了这一点,却没有明确了解条件语句是如何工作的(尤其是嵌套在循环中时)。我在设计一个迭代列表的算法时实现了这一点,并以1:1的比例构建了一个新列表 例如:Python 理解顺序条件句的行为,python,python-3.x,for-loop,if-statement,nested,Python,Python 3.x,For Loop,If Statement,Nested,不知何故,我在Python中做到了这一点,却没有明确了解条件语句是如何工作的(尤其是嵌套在循环中时)。我在设计一个迭代列表的算法时实现了这一点,并以1:1的比例构建了一个新列表 例如: x = ['test1', 'test2', 'test3'] y = [] for z in x: if z == #whatever: y.append(f'{z}{'is good'}' if z == #whatever: y.append(f'{z}{'
x = ['test1', 'test2', 'test3']
y = []
for z in x:
if z == #whatever:
y.append(f'{z}{'is good'}'
if z == #whatever:
y.append(f'{z}{'is bad'}'
人们会认为,在循环结束时,y和x的长度都是相同的。事实并非如此,在我的y
列表中,我有多次重复,并有不同的条件结果。也就是说,一个元素可能被附加了三次,并在语句中触发了许多不同的条件
所以,我开始测试,变得更加困惑:
import re
regexp = r'webaddy'
regexp2 = r'Web Addy'
zd = ['test', 'webaddy55', 'sss', 'Web Addy:99']
for xc in zd:
if re.match(regexp, xc):
print('This has webaddy' + ' | ' + xc)
if re.match(regexp2, xc):
print('This has Web Addy' + ' | ' + xc)
else:
print("Works" + ' | ' + xc)
我对此的预期输出为:
Works | test
This has webaddy | webaddy55
Works | sss
This has Web Addy | Web Addy:99
实际输出为:
Works | test
This has webaddy | webaddy55
Works | webaddy55
Works | sss
This has Web Addy | Web Addy:99
它怎么可能有5个输出,而列表中只有4个元素?我构造条件句的方式有什么问题?我的印象是,一旦满足一个条件,循环就会转到列表中的下一项,这里到底发生了什么?您的意思是使用
elif
?代码中的两个if
语句不是不相交的,因此可能出现两个匹配项,并附加两次。在第二个示例中,如果第一个块匹配而第二个块不匹配,您将得到两个打印结果——第一个if
和最后一个else
,这只取决于中间的if
的结果。您的代码没有任何嵌套条件,你按顺序执行。@ggorlen我相信对“else”的解释解决了我的主要问题。如果我只是想在某些东西没有满足前面的任何条件时执行,我应该使用什么。即,如果未触发任何事件,则为一种标准程序。请使用else
。就像英语一样,“如果你渴了,就喝水;如果你饿了,就喝水;如果你饿了,就吃别的食物;如果你饿了,就做别的事情。”。如果您想说明您可能饥渴的可能性,您必须在If
-elif
-中添加第三个分支,或者使用和`,同时说明饥渴。是,else
附加到最近的if
和可能介于两者之间的任何elif
s。如果有If-foo
后接If-bar-else-baz
,则第一个If-foo
完全独立于bar
/baz
块,应使用空格分隔以使其清晰。我建议阅读一篇关于if
/elif
/else
的教程,如果它仍然令人困惑的话。