Почему deque не принимает нули

Объясните ,пожалуйста, почему при создании q в массиве нет нулей?

from collections import deque
def except_zero(items: list):
    q = deque([x for x in sorted(items) if x])
    print(q)
    return [q.popleft() if num else 0 for num in items]

if __name__ == '__main__':
    print("Example:")
    print(list(except_zero([5, 3, 0, 0, 4, 1, 4, 0, 7])))

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

Автор решения: Wiktor Stribiżew

При x равном 0 выражение if x является falsy, т.е. возвращает значение False, поэтому все нулевые значения оказались отфильтрованы. Удалите эту проверку, если нулевые значения необходимы в результате.

См. документацию:

По умолчанию объект считается истинным, если его класс не определяет метод __bool__, возвращающий для объекта False, или метод __len__, возвращающий для него ноль.

Объекты, которые приравниваются к False

  • Пустой список: []
  • Пустой кортеж: ()
  • Пустой словарь: {}
  • Пустое множество: set()
  • Пустая строка: ""
  • Пустой диапазон: range(0)
  • Нули любых численных типов
  • Целочисленный ноль: 0
  • Ноль с плавающей точкой: 0.0
  • Комплексный ноль: 0j
  • None
  • False
→ Ссылка