¿Alguien sabe si Python tiene una función incorporada para imprimir incluso los valores par. Como range() por ejemplo.Números pares en Python
Gracias
¿Alguien sabe si Python tiene una función incorporada para imprimir incluso los valores par. Como range() por ejemplo.Números pares en Python
Gracias
Puede escribir range(0, 10, 2)
.
sólo tiene que utilizar un paso de 2:
range(start, end, step)
Probar:
range(0, 10, 2)
>>> if 100 % 2 == 0 : print "even"
...
even
No sé si esto es lo que quiere oír, pero es bastante trivial para filtrar fuera de los valores impares con la lista de comprensión.
evens = [x for x in range(100) if x%2 == 0]
o
evens = [x for x in range(100) if x&1 == 0]
También puede utilizar el parámetro de tamaño de paso opcional para range
a contar hasta por 2.
También podría escribir 'map (lambda x: x * 2, rango (0, 50))' – SLaks
Complementar esa última comprensión para obtener probabilidades: odds = [x para x en rango (100) si x & 1! = 0] –
#This is not suggestible way to code in Python, but it gives a better understanding
numbers = range(1,10)
even = []
for i in numbers:
if i%2 == 0:
even.append(i)
print (even)
a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
b = [i for i in a if i % 2 == 0]
print("Original List -->", a,"\n")
print("and the Even Numbers-->", b)
Gracias por su contribución. Tenga en cuenta que esta es una pregunta muy antigua que ya contiene muchas buenas respuestas. En particular, [la respuesta de Sapph] (https://stackoverflow.com/a/2184774/2124834) ya contiene la técnica que está describiendo. – Marein
También hay un par de maneras de escribir un iterador perezoso e infinito de números pares.
vamos a utilizar el módulo de itertools
y more_itertools
1 hacer iteradores que emulan range()
.
import itertools as it
import more_itertools as mit
# Infinite iterators
a = it.count(0, 2)
b = mit.tabulate(lambda x: 2 * x, 0)
c = mit.iterate(lambda x: x + 2, 0)
Todas las últimas opciones pueden generar una secuencia infinita de números pares, 0, 2, 4, 6, ...
.
se puede tratar a estos como cualquier generador haciendo un bucle sobre ellos, o puede seleccionar n
números de la secuencia a través de itertools.islice
o take
del itertools recipes ej .:
mit.take(10, a)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Esto es equivalente a list(range(0, 20, 2))
. Sin embargo, a diferencia de range()
, el iterador se detiene y se producirá el siguiente lote de números pares si se ejecuta de nuevo:
mit.take(10, a)
# [20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
detalles
Las opciones presentadas son todos los iteradores infinitas que start
con una entero, es decir, 0
.
itertools.count
produce el siguiente valor incrementado por step=2
(ver equivalent code).more_itertools.tabulate
es un itertools recipe que asigna una función a cada valor de una recta numérica (ver source code).more_itertools.iterate
produce el valor inicial (0
). Luego aplica una función al último elemento (incrementando en 2), produce ese resultado y repite este proceso (ver source code).1 Un paquete de terceros que implementa muchas herramientas útiles, incluyendo itertools recipes como take
y tabulate
.
Como hace xrange() – Will
+1 para los enlaces reales a los documentos ... ¿por qué tan pocas personas se molestan? –