首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果子字符串在字符串中,则当子字符串具有多个值时。

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

Stack Overflow用户
提问于 2014-06-13 19:52:57
回答 5查看 554关注 0票数 3

我知道有一种方法可以解决这个问题,但是我想要理解为什么这不起作用的基本逻辑。

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

代码语言:javascript
复制
for i in list:
    if (substring1 or substring2 or substring3) in string:
        print(string + " found!")

我在这里错过了什么?我认为如果在字符串中找到任何子字符串,则或条件将等于true。如前所述,只有在字符串中找到substring1而没有substring2或substring3时,我才会认为是正确的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-13 19:56:59

代码语言:javascript
复制
substring1 or substring2 or substring3

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

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

你想:

代码语言:javascript
复制
substring1 in string or substring2 in string or substring3 in string

或者:

代码语言:javascript
复制
substrings = (substring1, substring2, substring3)
if any(s in string for s in substrings):
票数 5
EN

Stack Overflow用户

发布于 2014-06-13 19:56:07

代码语言:javascript
复制
>>> 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进行计算,这将为您提供false。在布尔上下文中,空字符串计算为false

代码语言:javascript
复制
>>> s1 = ''
>>> (s1 or s2 or s3)
'll'

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

票数 3
EN

Stack Overflow用户

发布于 2014-06-13 20:03:19

这是因为python使用懒惰的评估..。例如..。

代码语言:javascript
复制
def error():
    raise ArithmeticError

print "nothing" or error()

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

代码语言:javascript
复制
print False or error() #raises error and breaks script
(substring1 or substring2 or substring3) #returns the first true value
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24212925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档