Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Crear listas con contador?
#1
Hola buenas,

Lo primero daros las gracias por leer este post.

Lo segundo es que llevo poco en esto levo probando y buscando info unos cuantos días pero no consigo nada que me ayude.

Estoy intentando crear un programita que cree el número de listas (de 2 datos cada una)  que se quiera ingresar por teclado, pero no sé cómo.

Lo que yo busco es que el usuario ingrese el número de listas que quiera crear, y en función de ese número, el programa cree tantas listas (de 2 datos cada una) como el usuario haya querido.

Lo suyo sería que para cada vez que el bucle haga un ciclo ( se introduzca el valor para X e Y), el programa crease una lista distinta.

Lo más que he conseguido es que me cree 2 listas dentro de 1 lista, O que me cree 1 lista con 4 datos

Este es mi código:

  1. x=0
  2. y=0
  3. lista=[]
  4. arb = int(input("Cuantos puntos vas a calcular: "))
  5. while arb > 0:
  6.     x = int(input("Introduce X: "))
  7.     y = int(input("Introduce Y: "))
  8.     lista.append(x)
  9.     lista.append(y)
  10.     arb = arb - 1
  11.     #print(arb)
  12.  
  13. print(lista)

Alguna idea? Muchas gracias de antemano
Responder
#2
Hola, ¿cómo estás?

Las listas pueden tener otras listas como elementos. Por ejemplo:

  1. # Esta lista tiene tres elementos, que a su vez son listas de dos elementos.
  2. puntos = [[1, 3], [6, 3], [5, 9]]


Considerando esto, tu código podría ser así:

  1. # Esta lista va a contener listas de dos elementos.
  2. puntos = []
  3. arb = int(input("Cuantos puntos vas a calcular: "))
  4. # range(arb) genera una lista de `arb` cantidad de elementos, cosa que te sirve
  5. # para que el cuerpo del bucle se ejecute tantas veces como el usuario
  6. # haya indicado.
  7. for i in range(arb):
  8. print("Ingrese el punto", i + 1) # +1 porque range() empieza del 0.
  9. x = int(input("Introduce X: "))
  10. y = int(input("Introduce Y: "))
  11. # Agregar una nueva lista [x, y] a la lista de puntos.
  12. puntos.append([x, y])
  13.  
  14. print(puntos)


(Cambié el while por un for, pero ambos métodos están bien).

Saludos!
Responder
#3
Hola Francisco,

Muchas gracias por tu respuesta! Sí que me sirve. Ya lo había compilado yo de otra manera (usando while) pero que al final me daba el mismo resultado que la forma en la que tú lo has hecho (aunque tu compilación es más clara y más directa)

El problema es que luego lo que quiero es operar con los elementos. Coger por ejemplo todos los primeros  elementos (las X) de cada lista y sumarlos, y luego coger todos los segundos elementos (las Y) y sumarlos. Y eso no lo sé hacer.

Suponía que para acceder a un elemento de una sublista sería más o menos como acceder a un elemento de una lista ( lista: lista[1] --> sublista: lista[1[1]] (sublista 1, elemento 1) ), pero no he podido hacerlo. Por eso quería hacerlo por listas separadas.

Alguna idea?
Muchísimas gracias!
Responder
#4
Hola.

La sintaxis para acceder a los elementos de una sublista es esta: lista[i][j].

Para sumar todos los X y todos los Y, podrías usar algo así:

  1. sum_x = 0
  2. sum_y = 0
  3. for punto in puntos:
  4. sum_x += punto[0]
  5. sum_y += punto[1]


O también:

  1. for x, y in puntos:
  2. sum_x += x
  3. sum_y += y


Y usando programación funcional:

  1. from operator import itemgetter
  2.  
  3. sum_x = sum(map(itemgetter(0), puntos))
  4. sum_y = sum(map(itemgetter(1), puntos))


Saludos!
Responder
#5
Muchísimas gracias Francisco por tu ayuda y tu tiempo!

Ahora ya puedo seguir avanzando! Smile
Responder
#6
De nada Smile
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)