Это просто замечательная вещь для понимания списка, если он может работать нормально, как цикл for
, люди не будут его создавать, потому что цикл for
более читабелен и понятен.
Вы можете обнаружить, что результатом понимания списка всегда является list
, в то время как результат цикла for
всегда будет содержать много отдельных значений, и эти отдельные значения являются частью iterable
[x +1 для x в диапазоне (1,5)]
[2, 3, 4, 5]
для x в диапазоне (1,10): печать (x + 1)
2
3
4
5
Вы можете просто понять, что в цикле понимания уже есть список значений, тогда они просто упорядоченно подают значение условия по значению. Как это:
[1 + 1, 2 + 1, 3 + 1, 4 + 1]
Ваш код неверен, потому что вы слишком много наследуете от обычного цикла for
. Ваш код, написанный для цикла for, будет выглядеть так:
for x in range(5,20):
for y in range(2,int(x/2)+1):
if any(x%y == 0):
print(x)
И результат, очевидно, будет:
TypeError: объект 'bool' не повторяется
, потому что any
требует итерацию, такую как выражение генератора или **list**
, как указано выше @ meowgoesthedog . По совпадению, список - только все о понимании списка. Тем не менее, вам нужно понять это, чтобы хорошо использовать понимание списка. Это иногда случается и со мной, в вашем случае for y in range(2,int(x/2)+1)
работает как обычный for
цикл.
Это синтаксис понимания списка.
В стороне условие if
, которое является необязательным предикатом. Мы можем создать другое понимание списка, следуя правилам с x%y==0
является выходным выражением и переменной y
, представляющей элементы входной последовательности range(2,int(x/2)+1)