05
Авг
2021

Филтрация list на наличие ложных элементов [False, None, 1, 0, -1, ""]

Предстоит написать функцию non_empty_truths(), которая с помощью генераторов списков должна вычислять копию входного списка списков, "очищенную" от ложных элементов (не только False, а любых ложных!), а заодно и от пустых списков — таковые могу присутствовать сами по себе или могут получаться после отбрасывания из них всех элементов.

Выглядеть использование полученной функции должно так:

>>> from solution import non_empty_truths
>>> non_empty_truths([])  # нечего отбрасывать, это тоже нормально
[]
>>> non_empty_truths([[], []])  # пустые отбрасываем
[]
>>> non_empty_truths([[0]])  # чистим, чистые, но пустые тоже отбрасываем
[]
>>> non_empty_truths([[0, ""], [False, None]])  # в Python многое считается ложным
[]
>>> non_empty_truths([[0, 1, 2], [], [], [False, True, 42]])
[[1, 2], [True, 42]]
>>>

Мое решение знаю топорное, как сделать более изящно?

def check_false(new_list):
    copy_list = new_list.copy()
    check_list = [False, None, 0, ""]
    sorter_list = [i for i in copy_list if i not in check_list]
    return sorter_list


# new_list = [False, None, 1, 0, -1, ""]
# print(check_false(new_list))


def non_empty_truths(list_numbers):
    copy_list = list_numbers.copy()
    for i, j in enumerate(copy_list):
        copy_list[i] = check_false(j)
    return list(filter(lambda val: val != [], copy_list))


print(non_empty_truths(list_numbers))

Источник: https://ru.stackoverflow.com/questions/1314527/%D0%A4%D0%B8%D0%BB%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-list-%D0%BD%D0%B0-%D0%BD%D0%B0%D0%BB%D0%B8%D1%87%D0%B8%D0%B5-%D0%BB%D0%BE%D0%B6%D0%BD%D1%8B%D1%85-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2-false-none-1-0-1

Тебе может это понравится...

Добавить комментарий