Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 组合多个成员资格测试_Python_String_If Statement_Conditional Statements - Fatal编程技术网

Python 组合多个成员资格测试

Python 组合多个成员资格测试,python,string,if-statement,conditional-statements,Python,String,If Statement,Conditional Statements,要检查字符串是否包含子字符串,可以使用“in”,如下所示: 要检查一个字符串是否包含两个子字符串中的一个子字符串,可以使用“或”之类的词: if "abc" in str or "def" in str: print("yay") if "abc" in str or "def" in str: print("yay") 我的问题是python是否有办法将其简化为以下内容: if "abc" or "def" in str: print("yay") 我知道这不会像

要检查字符串是否包含子字符串,可以使用“in”,如下所示:

要检查一个字符串是否包含两个子字符串中的一个子字符串,可以使用“或”之类的词:

if "abc" in str or "def" in str:
    print("yay")
if "abc" in str or "def" in str:
    print("yay")
我的问题是python是否有办法将其简化为以下内容:

if "abc" or "def" in str:
    print("yay")
我知道这不会像预期的那样起作用,因为它的评估结果总是正确的。(Python将检查这两条语句中的至少一条

  • “abc”
  • str中的def
为真,“abc”将始终评估为真)

话虽如此,除了这个相当冗长的方法外,是否还有其他方法可以检查这种情况:


将它们放入数组中,然后执行以下操作:

if any(x in word for x in a):

如果您的问题类似于是否有方法检查给定字符串列表中的任何字符串是否存在于较大的字符串中,那么这里已经回答了这个问题。我们可以将
any()
函数与
生成器表达式一起使用

范例-

>>> s = "Hello World Bye Abcd"
>>> l = ["Hello","Blah"]
>>> l1 = ["Yes","No"]
>>> any(li in s for li in l)
True
>>> any(li in s for li in l1)
False

你知道吗?你考虑过使用正则表达式吗?这将允许您搜索带有|符号的多个字符串,将它们视为“或”的“verbose”方法非常合理和清晰(但您应该避免为变量使用内置名称,如
str
),它们是生成器表达式。不要使用
str
作为变量名,因为它是一个内置的inI。当我遇到这个问题时,我不确定我的google搜索到底如何命名。我不知道已经有人问过了。谢谢——我已经把这个问题标记为删除,因为我自己再也做不到了。Python中有一个保留的内置函数。将其用作变量名会妨碍您使用该函数。因此,从今以后请不要将其用作变量名,它将编译并工作,但如果您尝试使用
str(my_object)
@paul1076将对象转换为字符串,那就祝您好运了,这并不重要,仍然是一种糟糕的做法
if any(x in word for x in a):
>>> s = "Hello World Bye Abcd"
>>> l = ["Hello","Blah"]
>>> l1 = ["Yes","No"]
>>> any(li in s for li in l)
True
>>> any(li in s for li in l1)
False