【问题标题】:Combining multiple membership tests [duplicate]结合多个成员资格测试[重复]
【发布时间】:2015-09-12 13:51:50
【问题描述】:

要检查一个字符串是否包含子字符串,可以像这样使用“in”:

if "abc" 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 "abc" in str or "def" in str:
    print("yay")

【问题讨论】:

  • 你知道regular expressions吗?
  • 您考虑过使用正则表达式吗?这将允许您使用 | 搜索许多字符串将它们视为“或”的符号
  • “verbose”方法是完全合理和清晰的(但你应该避免为你的变量使用像str这样的内置名称)。

标签: python string if-statement conditional-statements


【解决方案1】:
if any(word in sentence for word in {"abc", "def"}):
    print("yay")

【讨论】:

    【解决方案2】:

    将它们放在一个数组中并执行:

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

    这里已经回答了Check if multiple strings exist in another string

    【讨论】:

    • 不要使用str作为变量名,因为它是内置的
    • 当我遇到这个问题时,我不确定如何准确地对我的谷歌搜索进行措辞。我不知道它已经被问到了。谢谢 - 我已将问题标记为删除,因为我自己不能再这样做了。
    • str 在 Python 中有一个保留的内置函数。使用它作为变量名会妨碍您使用该函数的能力。所以今后请不要将其用作变量名
    • 它可以编译并工作,但如果尝试使用str(my_object) 将对象转换为字符串,那么祝你好运。
    • @paulpaul1076 没关系,还是不好的做法
    【解决方案3】:

    如果您的问题是是否有办法检查给定字符串列表中的任何字符串是否存在于更大的字符串中。为此,我们可以使用any() 函数和generator expressions

    例子-

    >>> 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
    

    【讨论】:

    • 顺便说一句,但那些不是list 理解,它们是生成器表达式。
    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 2012-03-02
    • 1970-01-01
    • 2012-11-28
    • 2015-11-20
    • 2018-08-11
    • 2020-05-05
    • 2016-09-19
    相关资源
    最近更新 更多