Проверка всех значений списка на false и если все значения False то должны вернуть также False

Рейтинг: 0Ответов: 3Опубликовано: 18.01.2023

Задача сделать функцию, по условиям которой необходимо проверять список с булевыми значениями, и если в списке все значения True или хотя бы одно значение True, то возвращать True, если же в списке все значение False то необходимо возвращать булевое значение False. Первую часть сделал без проблем, а вот с выводом False, не получается.

def all_targets_hit(attempts_for_each_target: list) -> bool:
    if all(attempts_for_each_target) or any(attempts_for_each_target):
        return True
    if not any(attempts_for_each_target):
        return False

Ответы

▲ 1

Это можно сделать так:

def all_targets_hit(targets):
    return all(any(target) for target in targets)

Вариант без использования all, any:

def f(targets):
    def check_target(target):
        for hit in target:
            if hit:
                return True
        return False

    for target in targets:
        if not check_target(target):
            return False
    return True
▲ 0

Ну можно сделать проще:

def foo(a: list[bool]) -> bool:
    return any(a)

a = [True, False, False]
print(foo(a))

Или так

def all_targets_hit(hits) -> bool:
    return any([any(hit) for hit in hits])


hits = [
    [False, False, False],
    [False, False, False],
    [False, False, False],
]
 
print(all_targets_hit(hits))
▲ 0

такое короче писать функциональщиной

all(map(any, hits))  # [[True, False], [True]] -> True