Вот версия этого кода, не связанная со списком:
nonprime = []
for i in range(2, 8):
for j in range(i*2, 50, i):
nonprime.append(j)
Шаг за шагом:
for i in range(2, 8):
Пока все довольно просто. Это вернет числа от 2 до 7, останавливаясь, когда оно достигает 8. В первой итерации этого цикла, i = 2
.
for j in range(i*2, 50, i):
Теперь мы создаем внутренний цикл. Давайте заменим i
на 2, чтобы мы могли видеть, что он делает на первой итерации external loop.
for j in range(2*2, 50, 2):
или
for j in range(4, 50, 2)
Возвращает список чисел, начинающихся с 4 и увеличивая каждый раз 2 (6, 8, 10), и останавливается, когда он достигает 50. Если вы посмотрите на результаты в nonprime
, вы увидите эти числа .
Следующая итерация внешнего цикла, i = 3
. Итак:
for j in range(i*2, 50, i):
становится:
for j in range(3*2, 50, 3):
Или:
for j in range(6, 50, 3):
Начиная с 6, мы продолжаем добавлять 3 и останавливаемся, когда получаем 50. Вы увидите, что эта последовательность появится следующей в списке значений в nonprime
Вот и все, что делает весь этот код. Как заметил @Bakuriu, это в основном Сито Эратостенов в обратном порядке, но это уже другая тема.