如何检查变量是否等于一个字符串或另一个字符串?

时间:2012-10-08 01:24:07

标签: python

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

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

5 个答案:

答案 0 :(得分:129)

这不符合您的期望:

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一样,因为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

答案 1 :(得分:18)

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

或更多pythonic,

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:3)

两次单独检查。此外,使用==而不是is来检查是否存在相等性而非身份。

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

答案 4 :(得分:0)

for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}):
        if createunicode(a.text) in ['<','<']:
            links.append(a.attrMap['href'])
        else:
            continue

它对我有用。