2009-03-24 10 views
6

Estoy tratando de recorrer el rango (750, 765) y agregar los números no secuenciales 769, 770, 774. Si intento agregar los números después de la función de rango, devuelve la lista de rango, luego los números individuales:¿Cómo puedo agregar números no secuenciales a un rango?


>>> for x in range(750, 765), 769, 770, 774: print x 
... 
[750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764] 
769 
770 
774 

¿Cómo puedo obtener todos los números en una sola lista?

Respuesta

23

Use el operador incorporado + para agregar sus números no secuenciales al rango.

for x in range(750, 765) + [769, 770, 774]: print x 
+0

-1. Esta no es una buena respuesta, ni tampoco es para otros. itertools.chain() debería ser usado. –

+6

por agregar 3 números? eso no es un golpe de rendimiento. Se requerirá más tiempo para importar herramientas de iteración. Si esto se hace en un ciclo de miles de rangos, entonces sí, tal vez debería considerar el método de la cadena. –

+0

+1: Concatenación de lista simple. –

2

¿Está buscando para ello:

mylist = range(750, 765) 
mylist.extend([769, 770, 774]) 
+0

Pensé en hacerlo de esta manera, pero sabía que tenía que haber una forma mejor y más concisa. Buena sugerencia, sin embargo. – adam

+0

sí, la respuesta aceptada es más corta. Pensé que necesitabas guardar la lista para usarla más tarde. – Vasil

+0

Tienes razón, necesito almacenarlo. ¡Enumera la comprensión al rescate! mylist = [x para x en el rango (750, 765) + [769, 770, 774]] – adam

15

Hay dos maneras de hacerlo.

>>> for x in range(5, 7) + [8, 9]: print x 
... 
5 
6 
8 
9 
>>> import itertools 
>>> for x in itertools.chain(xrange(5, 7), [8, 9]): print x 
... 
5 
6 
8 
9 

itertools.chain() es muy superior, ya que le permite utilizar iterables arbitrarias, en lugar de las listas y listas. También es más eficiente, no requiere copia de lista. Y te permite usar xrange, que deberías hacer cuando buclea.

+0

No estoy familiarizado con la biblioteca de itertools. Gracias por sugerirlo. Lo leeré. – adam

6

Las otras respuestas en esta página le serán útiles. Solo una nota rápida que en Python3.0, range es un iterador (como xrange estaba en Python2.x ... xrange se ha ido en 3.0). Si intenta hacer esto en Python 3.0, asegúrese de crear una lista del iterador de rango antes de hacer la adición:

for x in list(range(750, 765)) + [769, 770, 774]: print(x) 
+0

¡sí, y asegúrese de usar corchetes con funciones! – SilentGhost

+0

Ah, gracias. ¡No tienes idea de cuántas veces he obtenido un error de sintaxis en Python 3.0 debido a la función de impresión de maldición! –

Cuestiones relacionadas