2010-02-02 80 views

Respuesta

48

Range has three parameters.

Puede escribir range(0, 10, 2).

+4

Como hace xrange() – Will

+7

+1 para los enlaces reales a los documentos ... ¿por qué tan pocas personas se molestan? –

8

sólo tiene que utilizar un paso de 2:

range(start, end, step) 
5

Probar:

range(0, 10, 2) 
0
>>> if 100 % 2 == 0 : print "even" 
... 
even 
6

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.

+0

También podría escribir 'map (lambda x: x * 2, rango (0, 50))' – SLaks

+0

Complementar esa última comprensión para obtener probabilidades: odds = [x para x en rango (100) si x & 1! = 0] –

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) 
-1
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) 
+0

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

0

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_itertools1 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.

  • a. itertools.count produce el siguiente valor incrementado por step=2 (ver equivalent code).
  • b. more_itertools.tabulate es un itertools recipe que asigna una función a cada valor de una recta numérica (ver source code).
  • c. 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.

Cuestiones relacionadas