Булевое значение пустого списка

Это может быть просто идиотским, но для меня это немного запутанно:

In [697]: l=[] In [698]: bool(l) Out[698]: False In [699]: l == True Out[699]: False In [700]: l == False Out[700]: False In [701]: False == False Out[701]: True 

Почему l==False возвращает False а False == False возвращает True ?

3 Solutions collect form web for “Булевое значение пустого списка”

Вы проверяете его на буквенное значение логического значения False . То же, что и 'A' == False , не будет правдой.

Если вы его бросите, вы увидите разницу:

 >>> l = [] >>> l is True False >>> l is False False >>> l == True False >>> l == False False >>> bool(l) == False True 

Причина False == False истинна, потому что вы сравниваете одни и те же объекты. Это то же самое, что 2 == 2 или 'A' == 'A' .

Трудность возникает, когда вы видите такие вещи, как if l: и эта проверка никогда не проходит. Это потому, что вы проверяете значение истины элемента. По соглашению все эти элементы не будут иметь логическую проверку – то есть их логическое значение будет False :

  • None
  • False (очевидно)
  • Любая пустая последовательность: '' , [] , ()
  • Любое «нулевое» значение: 0 , 0.0 и т. Д.
  • Любая пустая коллекция: {} (пустой dict)
  • Все, чья len() возвращает 0

Они называются «ложными» значениями. Все остальное «истинно» . Что может привести к некоторым странным вещам вроде:

 >>> def foo(): ... pass ... >>> bool(foo) True 

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

 >>> def bar(): ... x = 1+1 ... >>> bool(bar) True >>> bool(bar()) False 

Пустой список не совпадает с False , но False равен False потому что это тот же объект. bool(l) возвращает False потому что пустой список является «ложным».

Короче говоря, == is not bool() == bool() .

Например, [1, 2] == [1, 2, 3] является False , даже если эти два являются «истинными».

Это связано с тем, что пустой список не является False , он просто «ложный» при преобразовании в bool или когда он оценивается условием a if или while (которое оценивает преобразование bool их состояния). Более подробную информацию см. В документации по проверке достоверности прав .

  • Проверьте сразу логические значения из набора переменных
  • python - сдерживается условными обозначениями pandas и / или булевым индексированием
  • python tilde унарный оператор как отрицательный numpy bool array
  • Логическая операция с символом в Sympy
  • Разбор логических значений с помощью argparse
  • Как определить последовательности значений в булевом массиве?
  • Как установить и проверить флаг boolean в python
  • Возможна ли логическая логика в шаблонах django?
  • Как создать фильтр «ИЛИ» с помощью elasticsearch-dsl-py?
  • Неожиданный вывод с использованием тройного оператора Pythons в сочетании с лямбда
  • Как я могу реплицировать excel COUNTIFS в python / pandas?
  • Python - лучший язык программирования в мире.