Использование OR сравнения с операторами IF

При использовании IF-инструкций в Python вы должны сделать следующее, чтобы «каскад» работал правильно.

if job == "mechanic" or job == "tech": print "awesome" elif job == "tool" or job == "rock": print "dolt" 

Есть ли способ заставить Python принимать несколько значений при проверке «равно»? Например,

 if job == "mechanic" or "tech": print "awesome" elif job == "tool" or "rock": print "dolt" 

6 Solutions collect form web for “Использование OR сравнения с операторами IF”

 if job in ("mechanic", "tech"): print "awesome" elif job in ("tool", "rock"): print "dolt" 

Значения в круглых скобках являются кортежем. Оператор in проверяет, находится ли элемент левой стороны где-то внутри правильного кортежа.

Обратите внимание, что когда Python ищет кортеж или список, используя оператор in , он выполняет линейный поиск. Если у вас есть большое количество предметов с правой стороны, это может быть узким местом производительности. Более крупным способом сделать это будет использование frozenset :

 AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ]) def func(): if job in AwesomeJobs: print "awesome" 

Использование frozenset над set предпочтительнее, если список удивительных заданий не нужно изменять во время работы вашей программы.

Вы можете использовать в:

 if job in ["mechanic", "tech"]: print "awesome" 

При проверке очень больших чисел также может стоить хранить набор элементов для проверки, поскольку это будет быстрее. Например.

 AwesomeJobs = set(["mechanic", "tech", ... lots of others ]) ... def func(): if job in AwesomeJobs: print "awesome" 
 if job in ("mechanic", "tech"): print "awesome" elif job in ("tool", "rock"): print "dolt" 

Хотя я не думаю, что вы можете делать то, что хотите напрямую, одна из альтернатив:

 if job in [ "mechanic", "tech" ]: print "awesome" elif job in [ "tool", "rock" ]: print "dolt" 

Кортежи с постоянными элементами сохраняются как константы в скомпилированной функции. Они могут быть загружены одной инструкцией. С другой стороны, списки и наборы всегда создаются заново при каждом выполнении.

Оба кортежа и списки используют линейный поиск для оператора. Наборы использует хэш-ориентированный поиск, поэтому он будет быстрее для большего количества параметров.

На других языках я бы использовал оператор switch / select, чтобы выполнить задание. Вы можете сделать это и в python .

  • Python: False vs 0
  • Что это за "и" заявление, действительно делающее в обратном?
  • Pythonic и эффективный способ сделать элемент «in» с помощью numpy
  • Инвертирование буферизированного массива numpy с использованием ~
  • Как получить обратное (отрицание) логического в Python?
  • Логическая путаница значений Python
  • Фильтрация кадра данных pandas с несколькими столбцами Boolean
  • Python: Получить общие символы из строк
  • Python - лучший язык программирования в мире.