【问题标题】:Preventing partial string match in "if" python)防止“if”python中的部分字符串匹配)
【发布时间】:2012-11-08 21:43:45
【问题描述】:

我确信这很简单,但我看不到或可能无法理解解决方案。

我有一些代码:

if any (mystring in s for s in mylist)
     do something with mystring

我在哪里测试mystring 是否在mylist 中,这工作正常。

但是如果我有清单

['apples','pears','chickens']

我正在测试 if 语句,我希望它仅在匹配准确时通过,即 mystring 应该通过,do something with mystring 仅适用于 apples,而不是 appapple。问题是 mystringmylist 的部分匹配正在通过。

即在上面的示例中,如果 mystringapp 它正在传递,我也不想要它。 我知道这是微不足道的,很抱歉。

【问题讨论】:

  • 我是个白痴。我会删除这个,但世界上到处都是白痴,也许这可以帮助他们中的一些人。

标签: python list for-loop


【解决方案1】:

我认为你应该这样做

if mystring in mylist:
  do something with mystring

【讨论】:

    【解决方案2】:

    如果你只是想测试它们是否相等,你可以这样做:

    if any (mystring == s for s in mylist):
         do something with mystring
    

    但是您可以将其简化为仅检查您的字符串是否在列表中,如下所示:

    if mystring in mylist:
         do something with mystring
    

    【讨论】:

    • 或更简单快捷:if mystring in myset :)
    【解决方案3】:

    只需使用相等运算符而不是in

    if any (mystring == s for s in mylist)
         do something with mystring
    

    运算符“in”可以在序列中查找项目,但它对字符串的行为有所不同 - 从 ePython 2.3 IIRC 开始 - 当序列是字符串(或 unicode)时,它也会匹配子字符串。

    因此,如果您只是想检查一个单词是否在列表中,in 就可以 - 就像

    if "apple" in ["apple", "pear", "berry"]:
    

    所以,不要使用if any (mystring in s for s in mylist) if mystring in mylist

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-15
      • 2012-06-15
      • 1970-01-01
      • 2019-10-18
      • 2022-11-14
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多