Есть ли способ упростить этот бит кода без необходимости вызывать одни и те же функции снова и снова? - PullRequest
0 голосов
/ 12 февраля 2019

Я играю с Project Euler, и у меня есть файл, полный простых чисел.

У меня есть функция, которая просматривает эти простые числа и вынимает основные факторы.Выражение, которое я использую, выглядит следующим образом:

def prime_factors(n, fastfactor=True):
    if fastfactor:
        with open(primefile, 'r') as primelist:
            primes = [int(x.strip()) for x in primelist if int(x.strip()) <= n and n % int(x.strip()) == 0]
    return primes

Код работает нормально, однако я хотел упростить выражение списка до следующего вида:

[x for int(x.strip()) in primelist if x <= n and n % x == 0]

Однако я ничего не могу понятьупростить и прояснить это выражение.

1 Ответ

0 голосов
/ 12 февраля 2019

Очевидно, что вы можете использовать цикл for, сохраняя результат int(x.strip()):

Однострочный способ - это понимание вложенного списка (с генератором внутри понимания):

[x for x in (int(x_raw.strip()) for x_raw in primelist) if x <= n and n % x == 0]
...