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

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

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

  • Почему «True == not False» является синтаксической ошибкой в ​​Python?
  • Что это за "и" заявление, действительно делающее в обратном?
  • Почему, если True медленнее, чем 1?
  • Преобразовать значение True / False, считанное из файла, в boolean
  • numpy boolean array с 1 битовыми записями
  • Разбор и вычисление определений логических множеств
  • SQLAlchemy Логическое значение этого предложения не определено
  • Как получить обратное (отрицание) логического в Python?
  •  
    Interesting Posts for Van-Lav

    Подпроцесс Python Popen с поисковой трубкой?

    Как найти, являются ли два числа последовательными номерами в серой кодовой последовательности

    Как сделать easy_install выполнять пользовательские команды в setup.py?

    Разделите все строки в кадре данных pandas на определенную строку

    как получить первый элемент и последний элемент, используя django, Location.objects.all ()

    Python doctest: Пропустить весь блок?

    Комбинации замков для динамического размера замка

    python может кодировать utf-8, но не может декодировать

    В python создайте временный файл в том же каталоге, что и другой файл?

    Я пытаюсь установить psycopg2 на Mac OS 10.6.3; он утверждает, что не может найти «stdarg.h», но я вижу, что он там; что мне делать?

    Индексирование 2D-массива Python numpy

    Как установить тензорный поток с virtualenvwrapper на macOS-Sierra

    Как торнадо останавливает текущий обработчик запросов?

    Отключить изображения в Selenium Python

    «ImportError: невозможно импортировать почтовую почту» в Flask

    Python - лучший язык программирования в мире.