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

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

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 их состояния). Более подробную информацию см. В документации по проверке достоверности прав .

  • Является ли False == 0 и True == 1 в Python частью реализации или гарантируется ли это языком?
  • Значение истины серии неоднозначно. Используйте команды a.empty, a.bool (), a.item (), a.any () или a.all ()
  • Boolean в Python
  • python - сдерживается условными обозначениями pandas и / или булевым индексированием
  • Логическое значение объектов в Python
  • Почему я не могу расширить bool в Python?
  • Значение bool списка в Python
  • numpy boolean array с 1 битовыми записями
  • Python - лучший язык программирования в мире.