【问题标题】:If string contains one of several substrings Python [duplicate]如果字符串包含几个子字符串之一Python [重复]
【发布时间】:2014-02-19 19:36:33
【问题描述】:

类似于这里:Does Python have a string contains substring method? 这个问题只处理一个字符串中的一个子字符串,我想测试几个中的一个。

类似:

if 'AA' or 'BB' or 'CC' not in string:
    print 'Nope'

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

string='blahblahAA'

if 仍然评估为 True 并打印该语句。我可能只是不正确地理解语法,任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 我发誓每天都会问一个关于这个错误的问题

标签: python string if-statement


【解决方案1】:

为此使用any

>>> s = 'blahblahAA'
>>> any(x not in s for x in ('AA', 'BB', 'CC'))
True

您当前的代码相当于:

if ('AA') or ('BB') or ('CC' not in string)

由于'AA'Truebool('AA')True),所以它总是计算为True

【讨论】:

  • 也可以使用正则表达式,但你知道他们怎么说正则表达式...
  • 我认为not all(x in s for x in ('AA', 'BB', 'CC')) 在这里可能更具可读性
  • @Eric 这也很好,但我更喜欢我的:如果任何字符串不在s 中,则返回True :)
  • @Eric 直到不知道(!A || !B) == !(A && B) 的人看到代码然后“嗯”了一声? (虽然我希望大多数程序员都知道布尔代数的这个属性,但总有可能不知道。)我个人更喜欢 Ashwini 的版本,但这只是个人喜好问题。如果问题要求不存在任何子字符串,我可能会使用not any(x in s for x in ('AA', 'BB', 'CC')),尽管all(x not in s for x in ('AA', 'BB', 'CC')) 也可以。
  • 这就是我的意思:如果问题要求不存在任何子字符串,我可能会使用 not any(x in s for x in ('AA', 'BB' , 'CC')), 并解决了问题。谢谢
【解决方案2】:

您应该使用 and 而不是 or 语句。现在,如果其中一个子字符串不在您的字符串中,您总是打印“Nope”。

在上面给出的示例中,您仍然打印 'Nope',因为 'BB' 和 'CC' 不在字符串中,并且整个表达式的计算结果为 true。

您的代码可能如下所示:

if ('AA' not in string) and ('BB' not in string) and ('CC' not in string):
    print 'Nope'

【讨论】:

  • 他从未测试过AA或BB是否在字符串中的表达式。
  • 是的,你是对的,但他仍然应该使用“和”,不是吗?
  • 我猜。我也更喜欢 all() 或 any(),但我会删除反对票。
猜你喜欢
  • 2021-05-30
  • 2011-05-14
  • 2011-08-31
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2014-06-25
  • 2012-12-06
  • 2015-09-16
相关资源
最近更新 更多