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

Rah*_*rma 68 python

if var is 'stringone' or 'stringtwo':
    dosomething()
Run Code Online (Sandbox Code Playgroud)

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

Die*_*Epp 142

这不符合您的期望:

if var is 'stringone' or 'stringtwo':
    dosomething()
Run Code Online (Sandbox Code Playgroud)

它与:

if (var is 'stringone') or 'stringtwo':
    dosomething()
Run Code Online (Sandbox Code Playgroud)

这总是正确的,因为它'stringtwo'被认为是"真实的"价值.

有两种选择:

if var in ('stringone', 'stringtwo'):
    dosomething()
Run Code Online (Sandbox Code Playgroud)

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

if var == 'stringone' or var == 'stringtwo':
    dosomething()
Run Code Online (Sandbox Code Playgroud)

不要使用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
Run Code Online (Sandbox Code Playgroud)


ins*_*get 20

if var == 'stringone' or var == 'stringtwo':
    do_something()
Run Code Online (Sandbox Code Playgroud)

或更多pythonic,

if var in ['string one', 'string two']:
    do_something()
Run Code Online (Sandbox Code Playgroud)

  • 更好的是,因为你不需要它是可变的并且不关心它们被检入的顺序,所以使用一个集合:`if var in {'string one','string two'}:`它也更快. (5认同)
  • @RahulSharma http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/避免在复合中重复变量名称if Statement (2认同)
  • @aJetHorn 其实我认为元组比集合快 (2认同)

Lin*_*ong 7

if var == 'stringone' or var == 'stringtwo':
    dosomething()
Run Code Online (Sandbox Code Playgroud)

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