Perché q
contiene quadrati
In [2]: q
Out[2]: [4, 16]
e lambda x: x % 4 == 0
tornerà True
per entrambi:
In [3]: 4 % 4 == 0
Out[3]: True
In [4]: 16 % 4 == 0
Out[4]: True
I numeri quadrati di lista dopo eseguire il controllo, che non riesce per 2 (2% 4 è):
In [5]: 2 % 4 == 0
Out[5]: False
Pertanto, 2 * 2 = 4 non sarà incluso nell'elenco.
In breve, se si vuole ottenere lo stesso comportamento, modificare la lista la vostra comprensione per i numeri quadrati prima di calcolare il resto:
[x * x for x in range(2, 5, 2) if pow(x, 2, 4) == 0] # [4, 16]
# ↖ equivalent to (x ** 2) % 4