Python. Как работет условие < if name: >

Только учусь и не могу найти информации по тому как работает условие.

Например, есть список каких-либо элементов, в том числе пустые / нулевые. И надо создать список, исключающий эти элементы:

elems = [(), (), ('',), ('a', 'b'), (), ('a', 'b', 'c'), (1,), (), (), ('d',), ('', ''), ()]

non_empty_elems = [el for el in elems if el]

Мне интересно какая химия происходит в части if el.

Я понимаю, что делает эта конструкция и что здесь используется булевое значение.

Это значит что питон проверяет "этот элемент существует"? Т.е. в данном случае 1 - существующий элемент (имеющий значение), а 0 - пустое значение? Или это по-другому работает?

Проще говоря, что происходит внутри языка во время выполнения if el


Ответы (2 шт):

Автор решения: Aliaksei Yurau

В данном случае у вас список кортежей условие if el стработает если ваш el не равен None. Пустое множество будь то список, словарь, кортеж тоже вернёт None

→ Ссылка
Автор решения: CrazyElf

if el: эквивалентно if bool(el):, а дальше смотрим документацию по стандартным типам данных Python:

Truth Value Testing

Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below.

By default, an object is considered true unless its class defines either a __bool__() method that returns False or a __len__() method that returns zero, when called with the object.

Here are most of the built-in objects considered false:

constants defined to be false: None and False

zero of any numeric type: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)

empty sequences and collections: '', (), [], {}, set(), range(0)

Ну то есть все объекты по умолчанию рассматриваются как True, за исключением:

  • None и False
  • 0 любого численного типа
  • пустых последовательностей и коллекций

Пояснение, с помощью каких встроенных методов объектов происходят проверки, позволяющие определить, что объект имеет значение False:

  • либо у него есть метод __bool__(), возвращающий False (видимо, это случаи None, False и разных типов числового нуля)
  • либо у него есть метод __len__(), возвращающий 0 (последовательности и коллекции)
→ Ссылка