Использование функции `all ()` при генерации простых чисел со списком - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь сгенерировать все простые числа до определенного предела и нашел следующий ответ на мой вопрос в другой записи. Может кто-нибудь объяснить, пожалуйста, здесь использование функции all(). Я знаю, что он генерирует True в случае, подобном all([1,2,3]) и False в all([1,2,False]).

[x for x in range(2, 20) if all(x % y != 0 for y in range(2, x))]

Ответы [ 3 ]

1 голос
/ 18 апреля 2019

Просто собираюсь перевести список понимания на английский:

Для каждого числа от 2 до 20-го целого числа (то есть 19) сохраняйте число в списке, если есть остаток, для деления на все числа от 2 до n-го целого числа, где n = x (то есть на единицу меньше, чем Икс).

Конкретный пример:

# If x is 4:
all(4 % 2 != 0, 4 % 3 != 0) -> all(False, True) -> False # 4 is not prime
1 голос
/ 18 апреля 2019

Объяснение кода путем определения единственного числа, является ли оно простым или нет:

Посмотрим, простое ли число 5 или нет

calculation = [5%2!=0?, 5%3!=0?, 5%4!=0?] 
Calculation = [True, True, True]
all(calculation) -> True (because all element of an iterable object(list) is true)

То есть 5 - простое число

Теперь давайте посмотрим, простое ли число 4:

calculation = [4%2!=0?, 4%3!=0?] 
Calculation = [False, True]
all(calculation) -> False (because if any element in an iterable collection is false means all() will return false.)

Так что 4 не является простым Примечание: выше не действительный код. Просто объяснение.

1 голос
/ 18 апреля 2019
[x for x in range(2, 20) if all(x % y != 0 for y in range(2, x))]

Сначала давайте оценим, что окружает all():

x % y != 0 for y in range(2, x)

x % y получает остаток
!= 0 не равно 0
for y in range(2, x) для y в диапазоне от 2 до x

Итак, all() проверяет все эти условия для True и, если это так, оценивается как True. Это то, что проверяет Prime, так как это основные условия, что все числа при делении вашего текущего числа на другие не имеют остатка 0, что означает, что оно будет делимым и, следовательно, не простым.

...