Как сделать функцию-фильтр

Есть генератор простых чисел

def prime_numbers_generator(n):
    prime_numbers = []
    for number in range(2, n + 1):
        for prime in prime_numbers:
            if not number % prime:
                break
        else:
            prime_numbers.append(number)
            yield number

И к нему есть функции, позволяющие проверить числа из генератора на наличие счастливых, и вывести на консоль с пометкой true

from operator import eq

def is_eq_sum(str_v, *slices):
    return eq(*map(lambda s: sum(map(int, s)), map(str_v.__getitem__, slices)))


def lucky_digits(v):
    str_v = str(v)
    if len(str_v) < 2:
        return True
    else:

        middle = len(str_v) // 2
        return is_eq_sum(str_v, slice(middle), slice(-middle, None))


for number in prime_numbers_generator(n=1000):
    print(number, lucky_digits(number), sep=' ')

Подскажите, как можно упростить этот код и сделать функцию фильтр, которая выдает такой же результат как и сейчас, берет из генератора значения и если число счастливое то рядом пишет true, если нет - false


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

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

Ну как-то так:

def prime_numbers_generator(n):
    prime_numbers = []
    for number in range(2, n + 1):
        for prime in prime_numbers:
            if not number % prime:
                break
        else:
            prime_numbers.append(number)
            yield number


def is_lucky(number):
    number = str(number)
    middle = len(number) // 2
    return True if sum(map(int, number[:middle])) == sum(map(int, number[-middle:])) else False


for i in prime_numbers_generator(1000):
    print(i, is_lucky(i), sep=' ')
→ Ссылка