Foros del Web » Programando para Internet » Python »

Cambio valores en una lista

Estas en el tema de Cambio valores en una lista en el foro de Python en Foros del Web. Después de mucho tiempo sin visitarlos y tratar de hacer mis programitas de python solita, de nuevo estoy aqui... lo que quiero lograr hacer es ...
  #1 (permalink)  
Antiguo 19/11/2010, 16:29
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 14 años, 2 meses
Puntos: 0
Cambio valores en una lista

Después de mucho tiempo sin visitarlos y tratar de hacer mis programitas de python solita, de nuevo estoy aqui...

lo que quiero lograr hacer es lo siguiente:
tengo una lista=[2,0,1,3] y a partir de esta quiero crear una lista de lista, el problema q lo que quiero que haga es de la lista inicial intercambiar el valor 2 de la primera posición 2 por el valor 3 de la última posición, luego cambiar el valor de la segunda posición por la ultima posición, es decir se va incrementado, seria la tercera por la ultima y asi...lo q asi debe hacerse p veces...y p siempre tendrá valor n/2, n es valor de posiciones q tenga la lista, en este caso es 4...pero la lista puede tomar valor n...

Ej: lista=[2,0,1,3]
listagenerada=[[3,0,1,2],[2,3,1,0]]
De la lista generada, cada lista q esta adentro en la primera posicion..intercambia el primero con el ultimo, la segunda lista de la lista generada cambia el segundo con el ultimo...La verdad q es bien complicado explicar lo q quiero hacer, pero ojalá q me hayan entendido...de todas maneras pondré mi programita q aunque sé q está malo, es para q tengan una idea
Código Python:
Ver original
  1. vector=[2,0,1,3]#puede tener cualquier tamaño n
  2. n=4
  3. p=2#siempre tendra valor n/2
  4. val=[]
  5. for i in range(p):
  6.     val.append(vector)
  7.  
  8. indice=0
  9. for i in range(p):
  10.     for j in range(n):
  11.         if j==indice:
  12.             aux=val[i][j]
  13.             val[i][j]=val[i][n-1]
  14.             val[i][n-1]=aux
  15.     indice=indice +1
  16.  
  17. print val
  #2 (permalink)  
Antiguo 19/11/2010, 18:53
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Cambio valores en una lista

Ok tu problema no es el código, tu problema es que no entiendes que es lo quiere hacer.

Por ejemplo, cuando tu dices:
Cita:
Iniciado por Ania_
el problema q lo que quiero que haga es de la lista inicial intercambiar el valor 2 de la primera posición 2 por el valor 3 de la última posición, luego cambiar el valor de la segunda posición por la ultima posición, es decir se va incrementado, seria la tercera por la ultima y asi...lo q asi debe hacerse p veces...y p siempre tendrá valor n/2, n es valor de posiciones q tenga la lista, en este caso es 4...pero la lista puede tomar valor n...
Lo complicas demasiado, simplemente quieres "revertir la lista" (así lo explicaría yo).

Y después pones:
Cita:
Iniciado por Ania_
De la lista generada, cada lista q esta adentro en la primera posicion..intercambia el primero con el ultimo, la segunda lista de la lista generada cambia el segundo con el ultimo...La verdad q es bien complicado explicar lo q quiero hacer, pero ojalá q me hayan entendido...de todas maneras pondré mi programita q aunque sé q está malo, es para q tengan una idea
Entonces cuantas listas genero? p listas? o solo genero 2? Puedes cual es el resultado para [1, 2, 3, 4, 5, 6, 7, 8] ?
Según lo que entendí debería ser [[8, 7, 6, 5, 4, 3, 2, 1], [1, 2, 3, 4, 5, 6, 7, 8]] estoy bien?

Consejo: Primero entender bien lo que te pide el problema y después hacerlo.
  #3 (permalink)  
Antiguo 19/11/2010, 21:33
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Cambio valores en una lista

El problema que deba entender sino algo que yo quiero crear ...pero puedes que tengas razón...

pero no es bien revertir la lista, sino q intercambiar los valores de la posición de la lista, que puede ser de la manera que explique antes...mi problema es q la función que hize me intercambia de la misma manera las dos listas dentro de la lista...

De todas maneras estoy probando diferentes maneras...haber si puedo conseguir algo parecido a lo que quiero hacer...
  #4 (permalink)  
Antiguo 19/11/2010, 21:41
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Cambio valores en una lista

Sigues sin responder, cual seria el resultado para la lista [1, 2, 3, 4, 5, 6, 7, 8]

Apuesto que revertir la lista y cambiar los lugares de el primero con el ultimo y el segundo con el penúltimo y así sucesivamente es lo mismo.

Probar con:
Código Python:
Ver original
  1. l = [1, 2, 3, 4, 5, 6, 7 8]
  2. print l
  3. print l[::-1]
  #5 (permalink)  
Antiguo 19/11/2010, 21:50
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Cambio valores en una lista

Haber si ahora explico mejor...

-Tengo una lista de n posiciones, para mi ejemplo 4 posiciones l=[0,1,3,2], los valores de la lista son aleatorios, y los valores seran de 0 a n-1.
-p me indica el 50% de la lista n, para el ejemplo seria 2
-eso me indicara cuantas listas mas genero, pero esas listas estaran dentro de una lista
-Ahora debo tomar la lista l e intercambiar la primera posición con la ultima [2,1,3,0], para la segunda lista, debo cambiar la segunda posición con la ultima tomando la lista l y no la q genere recien, y esa me quedaria asi [0,2,3,1], al final lo que quiero es q estas listas esten en una sola, de esta manera l2=[[2,1,3,0],[0,2,3,1]]

AHora es lo siguiente si mi lista es: l=[0,1,3,2,5,4]
p seria 3...por lo tanto debo generar una lista con 3 listas adentro
los cambios de posiciones serian lo mismo q la anterior pero como hay una lista mas, entonces a esa le debo cambiar la tercera con la ultima, pero siempre tomando la lista l como referencia...

Es esto lo que quiero hacer..., no sé si ahora lo expliqué mejor
  #6 (permalink)  
Antiguo 19/11/2010, 21:54
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Cambio valores en una lista

[1, 2, 3, 4, 5, 6, 7, 8]=???

para esta lista seria asi p valdria 4, por lo q tendria q crear 4 listas mas y quedarian asi

[[8,2,3,4,5,6,7,1],[1,8,2,3,4,5,6,7,2],[1,2,8,4,5,6,7,3],[1,2,3,8,5,6,7,4]]
  #7 (permalink)  
Antiguo 19/11/2010, 22:16
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Cambio valores en una lista

Si esas listas de listas lo manejas como una matriz entonces puedes ver las cosas un poco mas claro.

Código:
[8, 2, 3, 4, 5, 6, 7, 1]
[1, 8, 3, 4, 5, 6, 7, 2]
[1, 2, 8, 4, 5, 6, 7, 3]
[1, 2, 3, 8, 5, 6, 7, 4]
Función para generar esas listas de listas.
Código Python:
Ver original
  1. def fun(l):
  2.     sz = len(l) / 2
  3.     M = [l[:] for i in range(sz)]
  4.     for i in range(sz):
  5.         M[i][i], M[i][-1] = M[i][-1], M[i][i]
  6.     return M
Cualquier duda de mi código no dudes en preguntar.
  #8 (permalink)  
Antiguo 19/11/2010, 23:20
 
Fecha de Ingreso: septiembre-2010
Mensajes: 18
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Cambio valores en una lista

Admiro en verdad como lograste sacarlo!!, lo que yo hize en muchas líneas tu lo haces en pocas y más encima bien...

Hay dos cosas q me complica un poco
En 2 estas declarando M?? si es así no entiendo que hace l[:]
Y lo otro en la linea 5, estas haciendo los intercambios, creia que solo era valido para las tuplas, hacer eso...por lo visto tb se puede con las listas...

Gracias por la ayuda!!!
  #9 (permalink)  
Antiguo 19/11/2010, 23:26
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Cambio valores en una lista

l[:] hace una copia de la lista.

En general a, b = b, a cambia el valor de a por b y de b por a. Es como hacer un swap en c++

Etiquetas: lista, cambios
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 05:33.