Python 理解顺序条件句的行为

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}{'

不知何故,我在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}{'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
的教程,如果它仍然令人困惑的话。