¿Cómo agregar una declaración impresa en una expresión complicada?
Tengo el siguiente código:
prime_numbers = [
number
for number in range(2, 101)
if all(number % div != 0 for div in range(2, int(number**0.5) + 1))
]
¿Cómo agregaría una declaración impresa para el número?
Aceptado
Técnicamente, dado que la veracidad de print(number)
es False
( print()
regresar None
), puedes disfrutar de su efecto y usar un or
para obtener el resultado aún en la lista.
prime_numbers = [
print(number) or number
for number
in range(2, 101)
if all(
number % div != 0
for div
in range(2, int(number**0.5) + 1)
)
]
print(prime_numbers)
Dandote:
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Sin embargo, se desaconseja la comprensión de efectos secundarios como este (al menos para mí). Es posible que desee utilizar un for
bucle más tradicional.
Ver también: ¿Es Pythonic usar listas por comprensión solo para efectos secundarios?
Puedes hacerlo así.
def my_print (thing):
print(str(thing))
return thing
prime_numbers = [my_print(number) for number in range(2, 101) if all(number % div != 0 for div in range(2, int(number**0.5) + 1))]
Pero estoy de acuerdo con otros que dicen que la expresión debería eliminarse. Eso lo hace más legible. Y también puede permitirle utilizar un algoritmo más eficiente para enumerar números primos que la división de prueba.