Использование 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 .

  • Разбор логических значений с помощью argparse
  • Это Pythonic использовать bools как ints?
  • Pythonic и эффективный способ сделать элемент «in» с помощью numpy
  • Когда следует использовать list.count (0) и как мне сбрасывать товар «False»?
  • Преобразование «истинного» (JSON) в эквивалент Python «True»
  • Каково логическое значение «string» в Python?
  • Python numpy.nan и логические функции: неправильные результаты
  • Какой самый «пуфонический» способ логически объединить список логических элементов?
  • Инициализировать список с одинаковым значением bool
  • Булевой массив без всех значений True в одной строке
  • Разбор и вычисление определений логических множеств
  • Python - лучший язык программирования в мире.