Как проверить, равна ли переменная одной строке или другой строке?
if var is 'stringone' or 'stringtwo':
dosomething()
Это не работает! У меня есть переменная, и мне нужно, чтобы она что-то делала, когда она является одним из значений, но она не будет вводить оператор if. В Java if (var == "stringone" || "stringtwo")
работает. Как написать это в 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
if var == 'stringone' or var == 'stringtwo':
do_something()
или более pythonic,
if var in ['string one', 'string two']:
do_something()
Ответ 3
if var == 'stringone' or var == 'stringtwo':
dosomething()
'is' используется для проверки ссылки на две ссылки на один и тот же объект. Он сравнивает адрес памяти.
По-видимому, "stringone" и "var" - разные объекты, они содержат только одну строку, но это два разных экземпляра класса "str". Поэтому у них, конечно, есть два разных адреса памяти, а "is" вернет False.
Ответ 4
Две отдельные проверки. Кроме того, используйте ==
вместо is
для проверки равенства, а не идентификатора.
if var=='stringone' or var=='stringtwo':
dosomething()
Ответ 5
for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}):
if createunicode(a.text) in ['<','<']:
links.append(a.attrMap['href'])
else:
continue
Это работает для меня.