复合if语句和' in'运算符以检查字符串中是否包含多个子字符串

时间:2016-10-17 14:53:01

标签: python python-2.7

我正在检查另一个字符串中是否包含两个子字符串:

if (substr1 and substr2) in str:
    my_func()

这不起作用,只有一个子字符串是字符串的一部分时才输入if语句。有人可以解释原因吗?

我找到了以下解决方法,我只是想知道为什么Python会这样做。

substr_list = [substr1, substr2]
if all(substr in str for substr in substr_list):
    my_func()

2 个答案:

答案 0 :(得分:0)

它不起作用,因为(substr1 and substr2)返回substr2或操作数可以转换为False,然后验证if substr2 in str

'' and 'Some string'  # ''
'some value' and 'some value 2' # 'some value 2'
# full example
string_variable = 'some value' and 'some value 2' # You get 'some value 2'
string_variable in substr2

答案 1 :(得分:-2)

因此,and可以检查两个布尔值(True/False值)是否为True,但(substr1 and substr2)不是布尔值。但是,substr1 in strsubstr2 in str以及两个布尔值,因此您可以创建一个声明:

if substr1 in str and substr2 in str:
    myfunc()

现在在

substr_list = [substr1, substr2]
if all(substr in str for substr in substr_list):
    my_func()

语句(substr in str for substr in substr_list)创建一个返回两个布尔值的生成器。 all所做的是获取任何可迭代的布尔生成器列表,并返回单个布尔检查它们是否都是True