Почему 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 NoneFalse