Обьясните что происходит после return, и как это записать проще и понятнее?

Смысл функции игнорировать регистры в списке.

def is_contains(string: str, list_: list):
    count_calls()
    return True if string.lower() in [word.lower() for word in list_] else False

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

Автор решения: u111

Вот что это значит:

def is_contains(string: str, list_: list):
    count_calls()
    lst = [] # Генератор
    for word in list_:
        lst.append(word.lower())

    if string.lower() in lst: # Тернарный оператор
        return True
    else:
        return False
→ Ссылка
Автор решения: Artem Gafarov

Тот же функционал можно переписать следующим образом:

def is_contains(string: str, list_: list):
    count_calls()
    string = string.lower()
    for word in list_:
        if word.lower() == string:
            return True

    return False
→ Ссылка
Автор решения: Vladimir Bogdanov

Чтобы не создавать список и не тратить память понапрасну, берем генератор и потребляем его в функции any. Что in, что ==, все равно. Как только any встретит успешное равенство, перебор списка слов прекращается и возвращается True. Иначе вернет False.

def is_contains(string: str, list_: list):
    count_calls()
    return any(string.lower() == word.lower() for word in list_)
→ Ссылка