Признавайтесь, кто так пишет?
if not value in array:
...
По задумке, мы пытаемся проверить, отсутствует ли значение value в списке array. Звучит логично, но!
В данном случае оператор not и оператор in не связаны. То есть всё, что делает оператор not, это инвертирование значения, идущего после него, причём результатом будет bool. А после мы проверяем, есть ли этот bool в списке array??? Неожиданный поворот!
Выглядеть это может так:
if (not value) in array:
...
Но стоп, почему же тогда никаких проблем с этой записью нет и ОНО РАБОТАЕТ в таком виде!?
Дело в том, что я намеренно перечислил операторы в порядке их написания (чтобы страшней было). Хотя, на самом деле, оператор inимеет бОльший приоритет. В этом примере мы сначала проверяем наличие элемента в списке (вместо проверки "отсутствия") а потом инвертируем результат.
if not (value in array):
...
Да, получаем ровно тот же результат (считай повезло), но в два действия. Специально для таких случаев есть оператор not in, то есть более "питонично" писать так:
if value not in array:
...
Это будет выполняться в одно действие, так как оператор один (несмотря не мизерные затраты времени оператора not).
Понимайте то, что кодите!
#tricks