如果子字符串在字符串中,则当子字符串有多个值时

2024-06-16 15:24:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有办法解决这个问题,但我想了解为什么这不起作用。在

这是一个非常简单的语句,只有在显示“or list”中的第一个子字符串时才会返回True。在

for i in list:
    if (substring1 or substring2 or substring3) in string:
        print(string + " found!")

我错过了什么?如果在字符串中找到任何子字符串,那么or条件将等于true。也就是说,只有在字符串中找到substring1,而没有substring2或substring3时,我才认为是真的。在


Tags: or字符串intrueforstringif语句
3条回答

因为python使用延迟求值。。。例如。。。在

def error():
    raise ArithmeticError

print "nothing" or error()

将打印“nothing”,因为它在python代码中的计算结果为True不检查错误,这通常会引发错误并阻止脚本继续。。。在

^{pr2}$
substring1 or substring2 or substring3

假设substring1不是空字符串,则此表达式的计算结果为substring1,因为{}是真实的。然后检查它是否在string中。其他语句对子环没有影响。在

换句话说,or在{}之前被计算,而{}则计算它找到的第一个真值(这称为短路)。不能以这种方式使用in来检查字符串中是否有多个子字符串。在

你想要:

^{pr2}$

或者:

substrings = (substring1, substring2, substring3)
if any(s in string for s in substrings):
>>> string = 'hello'
>>> s1 = 'he'
>>> s2 = 'll'
>>> s3 = 'o'
>>> (s1 or s2 or s3)
'he'
>>> 'he' in string
True

这里的问题是您首先计算(s1 or s2 or s3),如果s1的计算结果不是false,那么它将给您s1。在布尔上下文中,空字符串的值为false

^{pr2}$

您需要的是s1 in string or s2 in string or s3 in string,如果字符串中至少有一个子字符串,则返回true。在

相关问题 更多 >