【问题标题】:How to check if a variable is equal to one string or another string? [duplicate]如何检查变量是否等于一个字符串或另一个字符串? [复制]
【发布时间】:2012-09-28 06:20:31
【问题描述】:
if var is 'stringone' or 'stringtwo':
    dosomething()

这不起作用!我有一个变量,当它是其中一个值时,我需要它来做某事,但它不会进入 if 语句。在 Java 中 if (var == "stringone" || "stringtwo") 有效。我如何用 Python 编写这个?

【问题讨论】:

标签: python


【解决方案1】:

这并不符合您的预期:

if var is 'stringone' or 'stringtwo':
    dosomething()

同理:

if (var is 'stringone') or 'stringtwo':
    dosomething()

这始终是正确的,因为 'stringtwo' 被认为是“真实”值。

有两种选择:

if var in ('stringone', 'stringtwo'):
    dosomething()

或者您可以编写单独的相等测试,

if var == 'stringone' or var == 'stringtwo':
    dosomething()

不要使用is,因为is 比较对象身份。有时你可能会侥幸逃脱,因为 Python 实习了很多字符串,就像你在 Java 中可能侥幸逃脱,因为 Java 实习了很多字符串。但是不要使用is,除非你真的想要对象标识。

>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True  # but could be False

【讨论】:

  • 非常感谢!这解决了我程序中的许多问题。 :)
【解决方案2】:
for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}):
        if createunicode(a.text) in ['<','<']:
            links.append(a.attrMap['href'])
        else:
            continue

它对我有用。

【讨论】:

    【解决方案3】:
    if var == 'stringone' or var == 'stringtwo':
        do_something()
    

    或更多pythonic,

    if var in ['string one', 'string two']:
        do_something()
    

    【讨论】:

    • @DSM 也缺少冒号。
    • 为什么第二个被认为更pythonic?
    • @RahulSharma jeffknupp.com/blog/2012/10/04/writing-idiomatic-python 避免在复合 if 语句中重复变量名
    • 更好,因为您不需要它是可变的,也不关心它们签入的顺序,请使用集合:if var in {'string one', 'string two'}: 它也更快。
    • @aJetHorn 其实我认为元组比集合快
    【解决方案4】:

    两个单独的检查。此外,使用== 而不是is 来检查相等性而不是身份。

     if var=='stringone' or var=='stringtwo':
         dosomething()
    

    【讨论】:

    • 我的声望不够。我今天刚加入 StackOverflow。
    【解决方案5】:
    if var == 'stringone' or var == 'stringtwo':
        dosomething()
    

    'is' 用于检查两个引用是否指向同一个对象。它比较内存地址。 显然,“stringone”和“var”是不同的对象,它们只是包含相同的字符串,但它们是“str”类的两个不同实例。所以它们当然有两个不同的内存地址,'is' 会返回 False。

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2022-03-31
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多