Python if противоположное значение

Как получить противоположное (отрицание) логического значения в Python?

Есть ли способ пропустить второе выражение if? Просто сказать компьютеру вернуть противоположное логическое значение bool ?

6 ответов

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

Принятый ответ здесь является наиболее правильным для данного сценария.

Это заставило меня задуматься о простом инвертировании логического значения в целом. Оказывается, что принятое решение здесь работает как один вкладыш, и есть еще один вкладыш, который также работает. Предполагая, что у вас есть переменная «n», которая, как вы знаете, является логическим значением, простейшие способы ее инвертирования:

Каким было мое первоначальное решение, а затем принятый ответ на этот вопрос:

Последнее более понятно, но я задумался над производительностью и решил ее через timeit — и оказалось, что n = not n также является БЫСТРЫМ способом инвертировать логическое значение.

Если вы пытаетесь реализовать переключатель , чтобы каждый раз, когда вы повторно запускаете постоянный код, который отменяется, вы можете добиться этого следующим образом:

try: toggle = not toggle except NameError: toggle = True 

Запуск этого кода сначала установит toggle в True , и каждый раз, когда вызывается этот фрагмент, переключение будет отменено.

Читайте также:  Is empty array list java

Вы можете просто сравнить логический массив. Например

В Python есть оператор not, верно? Разве это не просто «нет»? Как в,

not оператор (логическое отрицание)

Вероятно, лучший способ — использовать оператор not :

>>> value = True >>> not value False >>> value = False >>> not value True 
if bool == True: return False else: return True 

Логическое отрицание как функция

В модуле operator также есть две функции operator.not_ и его псевдоним operator.__not__ на тот случай, если он вам понадобится как функция, а не как оператор:

>>> import operator >>> operator.not_(False) True >>> operator.not_(True) False 

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

>>> lst = [True, False, True, False] >>> list(map(operator.not_, lst)) [False, True, False, True] >>> lst = [True, False, True, False] >>> list(filter(operator.not_, lst)) [False, False] 

Конечно, то же самое может быть достигнуто с помощью эквивалентной функции lambda :

>>> my_not_function = lambda item: not item >>> list(map(my_not_function, lst)) [False, True, False, True] 

Не используйте оператор побитового инвертирования ~ в логических значениях

Может возникнуть соблазн использовать побитовый оператор инвертирования ~ или эквивалентную операторную функцию operator.inv (или один из трех других псевдонимов там). Но поскольку bool является подклассом int , результат может быть неожиданным, поскольку он не возвращает «обратное логическое значение», он возвращает «обратное целое число»:

Это потому, что True эквивалентно 1 и False к 0 , а побитовая инверсия работает с поразрядным представлением целых чисел 1 и 0 .

Поэтому их нельзя использовать для «отрицания» bool .

Отрицание с массивами NumPy (и подклассами)

Если вы имеете дело с массивами NumPy (или подклассами вроде pandas.Series или pandas.DataFrame ), содержащими логические значения, вы можете фактически использовать побитовый обратный оператор ( ~ ), чтобы отрицать все логические значения в массиве:

>>> import numpy as np >>> arr = np.array([True, False, True, False]) >>> ~arr array([False, True, False, True]) 

Или эквивалентная функция NumPy:

>>> np.bitwise_not(arr) array([False, True, False, True]) 

Вы не можете использовать оператор not или функцию operator.not в массивах NumPy, поскольку они требуют, чтобы они возвращали один bool (не массив логических значений), однако NumPy также содержит логическую функцию not это работает поэлементно:

>>> np.logical_not(arr) array([False, True, False, True]) 

Это также может быть применено к небулевым массивам:

>>> arr = np.array([0, 1, 2, 0]) >>> np.logical_not(arr) array([ True, False, False, True]) 

Настройка ваших собственных классов

not работает, вызывая bool для значения и отменяя результат. В простейшем случае истинное значение просто вызовет > на объекте.

Так что, реализовав __bool__ (или __nonzero__ в Python 2) вы можете настроить значение истинности и, таким образом, результат not :

class Test(object): def __init__(self, value): self._value = value def __bool__(self): print('__bool__ called on '.format(self)) return bool(self._value) __nonzero__ = __bool__ # Python 2 compatibility def __repr__(self): return '()'.format(self=self) 

Я добавил оператор print , чтобы вы могли убедиться, что он действительно вызывает метод:

>>> a = Test(10) >>> not a __bool__ called on Test(10) False 

Аналогичным образом вы можете реализовать __invert__ для реализации поведения. когда ~ применяется:

class Test(object): def __init__(self, value): self._value = value def __invert__(self): print('__invert__ called on '.format(self)) return not self._value def __repr__(self): return '()'.format(self=self) 

Снова с print вызовом, чтобы увидеть, что это на самом деле называется:

>>> a = Test(True) >>> ~a __invert__ called on Test(True) False >>> a = Test(False) >>> ~a __invert__ called on Test(False) True 

Однако реализация __invert__ подобного рода может привести к путанице, поскольку ее поведение отличается от «нормального» поведения Python. Если вы когда-нибудь сделаете это, четко документируйте это и убедитесь, что у него довольно хороший (и распространенный) вариант использования.

Источник

Как использовать операторы AND, OR и NOT в IF в Python

Вы можете объединить несколько условий в одно выражение в условных операторах в Python, таких как if, if-else и elif. Это позволяет избежать ненужного написания нескольких вложенных операторов if.

В следующих примерах мы увидим, как мы можем использовать логический оператор AND для формирования составного логического выражения.

Пример 1: с оператором If

В следующем примере мы узнаем, как использовать логический оператор and в операторе If, чтобы объединить два логических условия для формирования составного выражения.

Чтобы продемонстрировать преимущества команды and, мы сначала напишем вложенный оператор if, а затем простой оператор, где он реализует ту же функциональность, что и вложенный оператор.

a = 5 b = 2 #nested if if a==5: if b>0: print('a is 5 and',b,'is greater than zero.') #or you can combine the conditions as if a==5 and b>0: print('a is 5 and',b,'is greater than zero.')

Здесь наш вариант использования состоит в том, что мы должны напечатать сообщение, когда a равно 5, а b больше 0. Без использования команды and мы можем написать только if, чтобы запрограммировать функциональность. Когда мы использовали логический оператор и обычный мы могли сократить количество if до одного.

a is 5 and b is greater than zero. a is 5 and b is greater than zero.

Пример 2: с оператором If-Else

В следующем примере мы будем использовать оператор and для объединения двух основных условных выражений в логическое выражение оператора If-Else.

a = 3 b = 2 if a==5 and b>0: print('a is 5 and',b,'is greater than zero.') else: print('a is not 5 or',b,'is not greater than zero.')
a is not 5 or 2 is not greater than zero.

Пример 3: с оператором elif

В следующем примере мы будем использовать функцию and для объединения двух основных условных выражений в логическое выражение оператора elif.

Мы узнали, как использовать логический оператор and с условными операторами: if, if-else и elif с хорошо подробными примерами.

Оператор OR

Вы можете объединить несколько условий в одно выражение в операторах if, If-Else или Elif.

В следующих примерах мы увидим, как мы можем использовать OR для формирования составного логического выражения.

Логический оператор OR возвращает True, если один из двух предоставленных ему операндов имеет значение true.

Пример 1: с оператором If

В следующем примере мы узнаем, как использовать OR для соединения двух логических условий для формирования логического выражения.

today = 'Saturday' if today=='Sunday' or today=='Saturday': print('Today is off. Rest at home.')
Today is off. Rest at home.

Пример 2: с оператором If-Else

В следующем примере мы будем использовать оператор OR для объединения двух основных условных выражений в логическое выражение.

today = 'Wednesday' if today=='Sunday' or today=='Saturday': print('Today is off. Rest at home.') else: print('Go to work.')

Пример 3: с оператором elif

В следующем примере мы будем использовать OR для объединения двух основных условных выражений в логическое выражение операторов elif.

today = 'Sunday' if today=='Monday': print('Your weekend is over. Go to work.') elif today=='Sunday' or today=='Saturday': print('Today is off.') else: print('Go to work.')

Мы узнали, как использовать оператор OR логический оператор с условным оператором Python: if, if-else и elif с хорошо подробными примерами.

Оператор NOT

Мы можем использовать логический оператор not с условием IF. Операторы внутри блока if выполняются только в том случае, если значение (логическое) равно False или если значение (коллекция) не пусто.

Синтаксис

Где, значение может иметь тип boolean, string, list, dict, set и т.д.

Если значение имеет логический тип, NOT действует как оператор отрицания. Если значение равно False, значение not будет True, и операторы в блоке if будут выполняться. Если value равно True, not value будет False, и операторы в блоке if не будут выполняться.

Если значение имеет строковый тип, то операторы в блоке if будут выполняться, если строка пуста.

Если значение имеет тип list, тогда операторы в блоке if будут выполняться, если список пуст. Такое же объяснение справедливо для значений других типов данных коллекции: dict, set и tuple.

Таким образом, мы можем использовать if not expression для условного выполнения блока операторов, только если значение не пустое или не False.

Пример 4

В этом примере мы будем использовать нелогический оператор NOT в логическом выражении IF.

a = False if not a: print('a is false.')

Пример 5: для печати строки

В этом примере мы будем использовать if not expression для печати строки, только если строка не пуста.

string_1 = '' if not string_1: print('String is empty.') else: print(string_1)

Пример 6: для печати списка

В этом примере мы будем использовать if not expression для печати списка только в том случае, если список не пуст.

a = [] if not a: print('List is empty.') else: print(a)

Пример 7: для печати словаря

В этом примере мы будем использовать if not expression для печати словаря, только если словарь не пуст.

a = dict(<>) if not a: print('Dictionary is empty.') else: print(a)

Пример 8: для печати набора

В этом примере мы будем использовать if not expression для печати набора, только если набор не пуст.

a = set(<>) if not a: print('Set is empty.') else: print(a)

Пример 9: для печати кортежа

В этом примере мы будем использовать if not expression для печати кортежа, только если кортеж не пуст.

a = tuple() if not a: print('Tuple is empty.') else: print(a)

Мы научились использовать оператор not вместе с условным оператором if с помощью примеров программ.

Источник

Оцените статью