如果字符串包含几个子字符串之一,则Python

pgi*_*erz -2 python string if-statement

与此处类似:Python是否具有包含子字符串方法的字符串?这个问题只处理一个字符串中的一个子字符串,我想测试几个。

就像是:

if 'AA' or 'BB' or 'CC' not in string:
    print 'Nope'
Run Code Online (Sandbox Code Playgroud)

但是,如果我的测试字符串是:

string='blahblahAA'
Run Code Online (Sandbox Code Playgroud)

if仍为True并打印该语句。我可能只是错误地理解了语法,将不胜感激。

谢谢!

Ash*_*ary 5

使用any此:

>>> s = 'blahblahAA'
>>> any(x not in s for x in ('AA', 'BB', 'CC'))
True
Run Code Online (Sandbox Code Playgroud)

您当前的代码等效于:

if ('AA') or ('BB') or ('CC' not in string)
Run Code Online (Sandbox Code Playgroud)

照'AA'原样True(bool('AA')is True),所以它总是计算为True。

  • 我认为“并非所有(x in s for x in ('AA', 'BB', 'CC'))”在这里可能更具可读性 (2认同)
  • @Eric直到不知道`(!A ||!B)==!(A && B)`的人看了看代码,然后说“呵呵”?(虽然我希望大多数程序员都知道布尔代数的这种特性,但总有一种可能性不成立。)我个人更喜欢Ashwini的版本,但这只是一个问题。如果问题是要求不存在任何子字符串,我可能会使用`all(x x in('AA','BB','CC') x in('AA','BB','CC'))中的x也不能工作。 (2认同)