Foros del Web » Programando para Internet » Python »

¿Como desempaquetar rangos numeros dentro de una tupla o lista?

Estas en el tema de ¿Como desempaquetar rangos numeros dentro de una tupla o lista? en el foro de Python en Foros del Web. Hola de nuevo, A veces cuando me surgen estas dudas, simples a primera vista, parece que no avanzo nada en Python. Aunque claro, tampoco le ...
  #1 (permalink)  
Antiguo 08/07/2015, 10:54
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 15 años
Puntos: 9
¿Como desempaquetar rangos numeros dentro de una tupla o lista?

Hola de nuevo,

A veces cuando me surgen estas dudas, simples a primera vista, parece que no avanzo nada en Python. Aunque claro, tampoco le puedo dedicar todo el tiempo que me gustaria.

Bueno...la duda:

Imaginemos que creamos una tupla o lista y ponemos unas secuencia de numeros. Por ejemplo, esta:

Código Python:
Ver original
  1. numeros = (1,3,4,5,6,10,11,12,13,14,23,24,25,26,27,28,29,30)

Como se puede ver el rango de ellos es este:

1
3 - 6
10 - 14
23 - 30

Cuando son pocos numeros lo podemos hacer de forma 'manual'. Pero claro, si son muchos, no es viable. Pense en hacer esto (pero sabia que no iba a funcionar):

Código Python:
Ver original
  1. numeros = (1, range(3,7), range(10, 15), range(23, 31))

Y nos deberia devolver:
Código Python:
Ver original
  1. numeros = (1,3,4,5,6,10,11,12,13,14,23,24,25,26,27,28,29,30)

He probado con listas por comprension o generadores dentro de la lista. Pero o no lo se hacer o no funciona.

Se trata, que utilizando esos rangos, nos genere los numeros sueltos como el primer ejemplo que puse. Para asi, poder trabajar con ellos.

Saludos!

Última edición por Koan; 08/07/2015 a las 11:17
  #2 (permalink)  
Antiguo 08/07/2015, 12:38
 
Fecha de Ingreso: mayo-2015
Mensajes: 15
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: ¿Como desempaquetar rangos numeros dentro de una tupla o lista?

Código Python:
Ver original
  1. def agregar(lista,ini,fin):
  2.     for i in range (ini,fin+1):
  3.         lista.append(i)
  4.     return lista
  5.  
  6. lista=[]
  7. agregar(lista,1,4)
  8. agregar(lista,7,15)
  9. print (lista)

[1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15]

Te sirve?
  #3 (permalink)  
Antiguo 08/07/2015, 12:53
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 15 años
Puntos: 9
Respuesta: ¿Como desempaquetar rangos de numeros dentro de una tupla o lista?

Si, claro que sirve. Muchas gracias.

El resultado que te da, es lo que deseo obtener. Pero claro, creia que eso se podia hacer con la funcion range. Bueno, usando solo esta funcion.

Lo suyo seria hacer esto:

Código Python:
Ver original
  1. lista = [1,2,3,4]
  2. lista.extend([range(5, 11)])

Y que nos devolviera:
Código Python:
Ver original
  1. [1,2,3,4,5,6,7,8,9,10]

Pero no, no lo hace. Al contrario, devuelve:

Código Python:
Ver original
  1. [1,2,3,4, range(5,11)]

Supongo que debe haber un metodo mas sencillo que crear una nueva funcion ¿No?

Lo mas aproximado que he encontrado es esto:

Código Python:
Ver original
  1. lista = [1,2,3,4]
  2. lista.extend([x for x in range(5,11)])

Código Python:
Ver original
  1. lista
  2. [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

La pregunta es...¿Hay otra forma de hacerlo aun mas simple?

Última edición por Koan; 08/07/2015 a las 13:01
  #4 (permalink)  
Antiguo 08/07/2015, 22:17
 
Fecha de Ingreso: junio-2009
Ubicación: House
Mensajes: 38
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: ¿Como desempaquetar rangos numeros dentro de una tupla o lista?

Hola amigo Koan yo lo realize de esta forma tal vez tiene un poco mas de código pero saca el rango desde 1 hasta infinito, mientras final no sea 0

Código Python:
Ver original
  1. final=1
  2. lista=[0]
  3. while final:
  4.     ini=int(input('num '))
  5.     final=int(input('final '))
  6.     lista.extend([x for x in range(ini,final+1)])
  7.     print(lista)
  #5 (permalink)  
Antiguo 09/07/2015, 10:35
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 15 años
Puntos: 9
Respuesta: ¿Como desempaquetar rangos numeros dentro de una tupla o lista?

Cita:
Iniciado por RaKKoS Ver Mensaje
Hola amigo Koan yo lo realize de esta forma tal vez tiene un poco mas de código pero saca el rango desde 1 hasta infinito, mientras final no sea 0

Código Python:
Ver original
  1. final=1
  2. lista=[0]
  3. while final:
  4.     ini=int(input('num '))
  5.     final=int(input('final '))
  6.     lista.extend([x for x in range(ini,final+1)])
  7.     print(lista)
Gracias por el codigo.

Bueno, en cierto modo queria evitar usar mucho codigo. Creia que con un simple range se podia conseguir. Mira, si hacemos esto:

Código Python:
Ver original
  1. numeros = tuple(range(1,10))
  2. >>> numeros
  3. (1, 2, 3, 4, 5, 6, 7, 8, 9)

Da el resultado que quiero. Pero se queda corto. Ya que quiero usar varios range. Y al hacer esto:

Código Python:
Ver original
  1. numeros = tuple((range(1,10), range(5,10)))
  2. >>> numeros
  3. (range(1, 10), range(5, 10))

Pues logicamente devuelve esos range sin desempaquetar.


Posible solucion:

Tras darles vueltas y mas vueltas, he utilizado el desempaquetado de tuplas usando el asterisco. A ver que os parece este codigo:

Código Python:
Ver original
  1. rangos = ((1, 6), (6, 11))
  2.  
  3. lista = []
  4. for x in rangos:    
  5.     lista.extend([i for i in range(*x)]) # asterisco para desempaquetar tupla

>>> lista
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

¿Que tal...?

Última edición por Koan; 09/07/2015 a las 11:20
  #6 (permalink)  
Antiguo 09/07/2015, 12:42
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 9 meses
Puntos: 18
Respuesta: ¿Como desempaquetar rangos numeros dentro de una tupla o lista?

Las listas y tuplas se puden concatenar simplemente con '+'.

>>> print range(1,4) + range(12,34)
[1, 2, 3, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]

Puedes usar reduce:

>>> numeros = [range(1,4), range(12,34)]
>>> print reduce(lambda x,y: x+y, numeros)
[1, 2, 3, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]


Son algunas ideas más.
Saludos.

Etiquetas: lista, numeros, tupla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:48.