Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Como elegir más de un elemento a la vez de una lista

Estas en el tema de Como elegir más de un elemento a la vez de una lista en el foro de Python en Foros del Web. Bueno me gustaría saber como con un input podrías elegir, separando los números por coma, 2 posiciones a la vez de una lista. Os dejo ...
  #1 (permalink)  
Antiguo 04/12/2014, 12:23
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Como elegir más de un elemento a la vez de una lista

Bueno me gustaría saber como con un input podrías elegir, separando los números por coma, 2 posiciones a la vez de una lista. Os dejo un ejemplo de como querría que fuera:

Código:
lista = [1, 2, 3, "hola", 5]

pregunta = int(input("Di la/-s posiciones: ")) #### Por ejemplo: 1,4  (lo que vendría a ser el 2 y el 5)
posiciones = lista[posiciones del primer número puesto, posición del segundo número puesto]
#El problema que hay es que si pongo 1,4 en el input lo toma como un número y no como 1 y 4
  #2 (permalink)  
Antiguo 04/12/2014, 20:58
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: Como elegir más de un elemento a la vez de una lista

Cosas que necesitas saber:
* Manipulación de cadenas.
* Conversión a entero.
* Uso basico de listas.

Metodos precisos a buscar:
split e int

Buena suerte con tu tarea.
  #3 (permalink)  
Antiguo 08/12/2014, 14:48
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Como elegir más de un elemento a la vez de una lista

Bueno pues para cuando tenga tiempo me pongo a buscarlo, que ahora ando liado con los exámenes finales del trimestre.

PD: A que te refieres exactamente con conversión a entero? En plan se que para convertir algo a entero se le pone antes el "int".
  #4 (permalink)  
Antiguo 08/12/2014, 16:43
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como elegir más de un elemento a la vez de una lista

Ni modo, pues igual si no puedes con eso no veo por que deberías aprobar la materia. Nadie te va hacer tu trabajo.
__________________
Grupo Telegram Docker en Español
  #5 (permalink)  
Antiguo 10/12/2014, 13:17
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Como elegir más de un elemento a la vez de una lista

Cita:
Iniciado por Carlangueitor Ver Mensaje
Ni modo, pues igual si no puedes con eso no veo por que deberías aprobar la materia. Nadie te va hacer tu trabajo.
No es que tenga ganas de discutir pero para empezar esto lo hago por diversión, no estoy dando informatica y no voy ni a una universidad, tengo 14 años y lo hago por pura diversión así que no tengo nada que aprobar. Además alguien dijo que me lo hicierais? Solo dije que buscaré mas tarde, que no cierren el tema si lo ven así vacío que ya os digo yo cuando terminé con esto.
  #6 (permalink)  
Antiguo 13/12/2014, 13:53
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Como elegir más de un elemento a la vez de una lista

Hola, muchas gracias por la ayuda y ya entiendo algo mejor como funcionan las listas y las tuplas, he usado .split y he conseguido esto:


Después obviamente lo que tengo que hacer es que esta variable con el .split convierta todos sus elementos a simples números enteros(porque como veis está en forma de lista). El problema es que no se como quitar un elementos de una lista a la vez que lo declaro en entero(por ejemplo se que si para quitar es lista.remove(elemento) pero si hago eso el elemento se pierde y no puedo convertirlo en entero)
  #7 (permalink)  
Antiguo 13/12/2014, 14: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: Como elegir más de un elemento a la vez de una lista

Puedes usar map que esta en las FAQs o puedes usar list comprehension http://www.forosdelweb.com/f130/faqs...3/#post3591972 también detallada en las FAQs
  #8 (permalink)  
Antiguo 14/12/2014, 06:54
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Como elegir más de un elemento a la vez de una lista

No termino de entenderlo, a ver yo seguí el ejemplo y hice esto:
Código:
def convertir_a_entero(x):
    return int(x)

                    ........
####CÓDIGO DEL JUEGO###
                    ........

conviertendo = map(convertir, respuesta_coger) #respuesta_coger es la lista que se crea al hacer .split
Y me después sumando un número con el de esta lista convertida me da el error de que no se pueden sumar int con str(el problema está en la lista de map ya que la otra funciona perfectamente)

PD: Mira ahora estoy intentando arreglarlo sin usar map:
Código:
respuesta_coger = pregunta_mesa.split(',')
elección_1 = cartas_mesa[int(respuesta_coger[0])] 

#EL PROBLEMA QUE ESTOY INTENTANDO ARREGLAR AHORA ES COMO HACER QUE AL SUMAR COJA MAS DE UNA ELECCION YA QUE LA SUMA ES ASÍ:

suma_15 = int(respuesta_echar[0] + elección_1[0]) #como hacer para que sume 1 or si hay mas que sume todas, he intentado esto:
elección_2 = [0, 0]

if not respuesta_coger == [x]:  #COMO PUEDO HACER PARA QUE LA EQUIVALENCIA SIGNIFIQUE QUE: si respuesta_coger no tiene un solo elemento:
   elección_2 = cartas_mesa[int(respuesta_coger[1])]
   #print(elección_2)

Última edición por 12trunks12; 14/12/2014 a las 07:17
  #9 (permalink)  
Antiguo 14/12/2014, 18:19
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: Como elegir más de un elemento a la vez de una lista

Volviendo a tu problema original. Creo que estas tratando de hacer esto (ya tu me dirás).

Código Python:
Ver original
  1. lista = [1, 2, 3, 4, 5]
  2.  
  3. posiciones = input("Di la(s) posicion(es): ")
  4. posiciones = [int(posicion) for posicion in posiciones.split(',')]
  5. valores =[lista[posicion] for posicion in posiciones]
  6. print(valores)

El cual lo puedes reducir y quedar con
Código Python:
Ver original
  1. lista = [1, 2, 3, 4, 5]
  2. valores =[lista[int(posicion)] for posicion in input("Di la(s) posicion(es): ").split(',')]
  3. print(valores)
Pero no veo razón para volverlo tan ilegible.

Primero, estoy asumiendo que usas python3, porque en python2 te daría un resultado diferente.
Segundo, nosotros no tenemos contexto de que estas hablando, no podemos ver tu pantalla, así que cuando redactes trata de leer lo que escribiste y preguntarte, "Si fuera una persona que solo leera esto sería suficiente información?" o "me estaré expresando lo suficientemente claro?"

Tomemos como ejemplo tu código:
Código Python:
Ver original
  1. # Me pregunto que valor tendra `pregunta_mesa`
  2. respuesta_coger = pregunta_mesa.split(',')
  3.  
  4. # O que contendra `cartas_mesa`
  5. elección_1 = cartas_mesa[int(respuesta_coger[0])]
  6.  
  7. #EL PROBLEMA QUE ESTOY INTENTANDO ARREGLAR AHORA ES COMO HACER QUE AL SUMAR COJA MAS DE UNA ELECCION YA QUE LA SUMA ES ASÍ:
  8. # Explicación en mayúsculas y eso de "cojer mas de una elección" no me queda muy claro de donde.
  9.  
  10. # Definitivamente sin `pregunta_mesa` o `cartas_mesa` no se que contienen elección_1
  11. # Y ahora de donde salio `respuesta_echar`?
  12. suma_15 = int(respuesta_echar[0] + elección_1[0]) #como hacer para que sume 1 or si hay mas que sume todas, he intentado esto:
  13. elección_2 = [0, 0]
  14.  
  15. # Me rindo, no se que estas tratando de hacer porque no tengo un ejemplo que pueda probar.
  16. if not respuesta_coger == [x]:  #COMO PUEDO HACER PARA QUE LA EQUIVALENCIA SIGNIFIQUE QUE: si respuesta_coger no tiene un solo elemento:
  17.    elección_2 = cartas_mesa[int(respuesta_coger[1])]
  18.    #print(elección_2)
  #10 (permalink)  
Antiguo 15/12/2014, 10:28
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Como elegir más de un elemento a la vez de una lista

Ok perdona por lo de falta de datos, es que tampoco quería pasar el código entero porque son unas 150 líneas y tardaríais en leerlo, pero os lo resumo ahora y os cuento que necesito saber:

Código entero:
Código:
import random

print()
print()
print("-------------------------Bienvenidos al juego de cartas-------------------------")
print()
print("Las reglas son sencillas: Te daremos 3 cartas y en la mesa habrá 4")
print("Deberás de sumar 15 con UNA de tus cartas junto con las que quieres de la mesa")
print("Responde a las preguntas con números en")

#########################------------BARAJA----------####################

palos = ["Oros", "Espadas", "Bastos", "Copas"]
valor = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
valores = [valor for valor in range(1, 11)]
baraja = [(valor, palo) for palo in palos for valor in valores]

cartas_mano = []
def repartir():
    global cartas_mano
    cartas_mano = []

    carta_1 = random.choice(baraja)
    baraja.remove(carta_1)
    cartas_mano.append(carta_1)

    carta_2 = random.choice(baraja)
    baraja.remove(carta_2)
    cartas_mano.append(carta_2)

    carta_3 = random.choice(baraja)
    baraja.remove(carta_3)
    cartas_mano.append(carta_3)

    global intentos_cartas
    intentos_cartas = 3


#######-----MONTÓN----########
montón = []

#########-----MESA-----#############
cartas_mesa = []

carta_mesa_1 = random.choice(baraja)
baraja.remove(carta_mesa_1)
cartas_mesa.append(carta_mesa_1)

carta_mesa_2 = random.choice(baraja)
baraja.remove(carta_mesa_2)
cartas_mesa.append(carta_mesa_2)

carta_mesa_3 = random.choice(baraja)
baraja.remove(carta_mesa_3)
cartas_mesa.append(carta_mesa_3)

carta_mesa_4 = random.choice(baraja)
baraja.remove(carta_mesa_4)
cartas_mesa.append(carta_mesa_4)



#######################--------------JUEGO-------------#####################

intentos_cartas = int(3)

def ronda():
    global intentos_cartas
    while intentos_cartas > 0:
        intentos_cartas = intentos_cartas - 1

        print()
        print("                          CARTAS DE LA MESA:")
        print(cartas_mesa)
        print()
        print("                               TU MANO:")

        print("Así es tu mano:", cartas_mano)
        print()

        print(intentos_cartas)

        try:     #CARTA QUE TIENE QUE ECHAR
            pregunta_echar = int(input("Que carta deseas echar?(di la posición): "))
            respuesta_echar = cartas_mano[pregunta_echar - 1]

            print(respuesta_echar)


            pregunta_coger = str(input("¿Deseas coger alguna carta? ")).lower()

            if pregunta_coger == "no":  #SI NO QUIERE COGER CARTAS DE LA MESA
                cartas_mesa.append(respuesta_echar) ###---AÑADIMOS LA CARTA ECHADA A LA MESA
                cartas_mano.remove(respuesta_echar) ###---ELIMINAMOS LA CARTA ECHADA DE LA MANO

                print("Ahora la mesa está así: ", cartas_mesa)
                if intentos_cartas > 0:
                    print("Ahora tu mano está así: ", cartas_mano)
                    print()
                else:
                    print("No te quedan cartas, ahora te damos otras 3")

            elif pregunta_coger == "sí" or pregunta_coger == "si":  #SI QUIERE COGER CARTAS DE LA MESA
                #pregunta_mesa = int(input("Que carta/s deseas coger?(di la posición): "))
                #respuesta_coger = cartas_mesa[pregunta_mesa - 1]
                pregunta_mesa = input("Que carta/s deseas coger?(di la posición/-es separadas por coma): ") #  1,4
                respuesta_coger = pregunta_mesa.split(',')                                                # ["1","4"]

                elección_1 = cartas_mesa[int(respuesta_coger[0]) - 1]
                print(elección_1)

                suma_15 = int(respuesta_echar[0] + elección_1[0] + elección_2[0])

                if suma_15 == int(15):
                    print()
                    print("¡BIEN!")
                    print()

                    ####---MONTON DE CARTAS RECOGIDAS
                    global montón
                    montón = montón + [respuesta_coger, respuesta_echar]
                    print("El montón", montón)

                    ###---ELIMINAMOS LAS CARTAS USADAS DE LA MESA Y LA MANO
                    cartas_mano.remove(respuesta_echar)
                    cartas_mesa.remove(respuesta_coger)

                    print("Ahora la mesa está así: ", cartas_mesa)
                    print("Ahora tu mano está así: ", cartas_mano)
                    print()

                else: #SI LA SUMA NO DA 15
                    print()
                    print("La suma no da 15, la carta ha sido añadida a la mesa")
                    print()

                    ###---ELIMINAMOS LAS CARTAS USADAS DE LA MANO Y LA AÑADIMOS A LA MESA
                    cartas_mesa.append(respuesta_echar)
                    cartas_mano.remove(respuesta_echar)


                intentos_cartas = intentos_cartas + 1
                print()
                print("Responda con Sí o No")
        except ValueError:
            intentos_cartas = intentos_cartas + 1
            print()
            print("Indique un número entero válido(del 1 al 3)")
El problema está a partir de la línea 108, porque lo que quiero es esto:
1.- Tengo unas cartas en la mano
2.- Hay unas cartas en la mesa
3.- Echo obligatoriamente una carta de mi mano
4.- Quiero coger más de una carta de la mesa(aquí está el problema)

Lo que hice para realizar el paso 4 pues obviamente poner un input, ahora eso lo quiero transformar a la posición de la cartas_mesa que es la lista que contiene las cartas de la mesa y no se muy bien como hacerlo ya que con .split lo que hago es crear otra lista con los valores puestos(por ejemplo si pongo 1,5,6 aparece ['1', '5', '6'] y necesito que esos 3 valores sean cartas_mesa[1], cartas_mesa[5] y cartas_mesa[6])
  #11 (permalink)  
Antiguo 16/12/2014, 22:04
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: Como elegir más de un elemento a la vez de una lista

Cita:
Iniciado por 12trunks12 Ver Mensaje
Lo que hice para realizar el paso 4 pues obviamente poner un input, ahora eso lo quiero transformar a la posición de la cartas_mesa que es la lista que contiene las cartas de la mesa y no se muy bien como hacerlo ya que con .split lo que hago es crear otra lista con los valores puestos(por ejemplo si pongo 1,5,6 aparece ['1', '5', '6'] y necesito que esos 3 valores sean cartas_mesa[1], cartas_mesa[5] y cartas_mesa[6])
Esto precisamente ya te lo conteste hace 2 mensajes.

Si probaste este código es justo lo que buscas. Solo que tienes que adaptarlo para que funcione en tu código.
Código Python:
Ver original
  1. lista = [1, 2, 3, 4, 5]
  2. valores =[lista[int(posicion)] for posicion in input("Di la(s) posicion(es): ").split(',')]
  3. print(valores)

Vamos a adaptarlo:
Código Python:
Ver original
  1. pregunta_mesa = input("Que carta/s deseas coger?(di la posición/-es separadas por coma): ") #  1,4
  2. respuesta_coger = pregunta_mesa.split(',')                                                # ["1","4"]
  3. elecciones = [cartas_mesa[int(posicion)-1] for posicion in respuesta_coger]
  4. print(elecciones)
  #12 (permalink)  
Antiguo 17/12/2014, 13:02
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Como elegir más de un elemento a la vez de una lista

Ok si que va, ya una última cosa. Necesito coger el primer elemento de cada uno de los elementos que hay en elecciones(por ejemplo si hay (2, 'Oros') y (3, ' Oros') coger el 2 y el 3 y sumarlos). Otra cosa, me podrías pasar algún artículo o página en el que explique como funciona eso de for algo in elemento? Es que estoy interesado ya que veo que es algo bastante útil pero no se que poner en google para encontrarlo

PD: Perdona creo que ya he conseguido adivinar como se hace, pero me lié un poco y tuve que hacer bucles porque aun no tengo muchos conocimientos por lo que no me importaría que pusieras como lo harías tu

Última edición por 12trunks12; 17/12/2014 a las 14:02
  #13 (permalink)  
Antiguo 17/12/2014, 23:08
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: Como elegir más de un elemento a la vez de una lista

Puedes leer sobre cliclos en el tutorial de python3.

https://docs.python.org/3/tutorial/c...for-statements

Realmente te recomiendo aprender sobre el lenguaje, especialmente porque veo que no sabes usar el for, las estructuras de datos básicos e incluso los datos primitivos.

Cosas como
Código Python:
Ver original
  1. myvar = int(3)
  2. # o
  3. myvar = str(input('> '))
Hacen que no tenga sentido o que sean innecesarias. Spoiler (3 ya es un entero e input siempre regresa un string).

Tomemos por ejemplo:
Código Python:
Ver original
  1. #########-----MESA-----#############
  2. cartas_mesa = []
  3.  
  4. carta_mesa_1 = random.choice(baraja)
  5. baraja.remove(carta_mesa_1)
  6. cartas_mesa.append(carta_mesa_1)
  7.  
  8. carta_mesa_2 = random.choice(baraja)
  9. baraja.remove(carta_mesa_2)
  10. cartas_mesa.append(carta_mesa_2)
  11.  
  12. carta_mesa_3 = random.choice(baraja)
  13. baraja.remove(carta_mesa_3)
  14. cartas_mesa.append(carta_mesa_3)
  15.  
  16. carta_mesa_4 = random.choice(baraja)
  17. baraja.remove(carta_mesa_4)
  18. cartas_mesa.append(carta_mesa_4)

Lo puedes simplificar con un for.
Código Python:
Ver original
  1. #########-----MESA-----#############
  2. cartas_mesa = []
  3.  
  4. for i in range(4):
  5.     carta_mesa = random.choice(baraja)
  6.     baraja.remove(carta_mesa)
  7.     cartas_mesa.append(carta_mesa)

Se puede incluso simplificar aun más. Con diferentes metodos como slices, poo o fp.
  #14 (permalink)  
Antiguo 18/12/2014, 12:25
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Como elegir más de un elemento a la vez de una lista

Bueno como ya dije en mi primer tema estoy aprendiendo el lenguaje y a mayores es mi primer lenguaje por lo que siempre cuesta un poco mas o eso creo. Intento coger todo lo que puedo, de echo en eso que abreviaste tu de las cartas de la mesa intenté hacerlo así:
Código:
#########-----MANO----#########
def carta():
    carta = random.choice(baraja)
    baraja.remove(carta)
    
cartas_mano = []
def repartir():
    global cartas_mano
    cartas_mano = []
    
    carta()
    cartas_mano.append(carta)
    
    carta()
    cartas_mano.append(carta)
    
    carta()
    cartas_mano.append(carta)
    
    carta()
    cartas_mano.append(carta)
    
    global intentos_cartas
    intentos_cartas = 4
Pero al imprimir la carta en la lista en vez de aparecer la carta aparece una serie rara de números y letras.
  #15 (permalink)  
Antiguo 18/12/2014, 19:38
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: Como elegir más de un elemento a la vez de una lista

Pero claro, estas añadiendo la función carta a la lista cartas_mano.

Antes de seguir te recomiendo que te agarres un libro de python con ejercicios y que te pongas a teclearlos. En la interprete interactivo. Porque de lo contrario solo terminaras mas confundido de lo que actualmente estas.
  #16 (permalink)  
Antiguo 19/12/2014, 12:53
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Como elegir más de un elemento a la vez de una lista

A ver te cuento, no estoy aprendiendo por mi cuenta sinó que voy a clases con un profesor. Estos trabajillos los hago en mi tiempo libre y normal que tenga fallos cuando aun no di esa parte, aun así por ejemplo justo ayer aprendimos a hacer el bucle for para cosas como:
Código:
frase = input("Di algo: ")
caracteres_total = len(frase)

vocales = [a,e,i,o,u]
consonantes = [b,c,d,f,...]

n_vocales = 0
n_consonantes = 0
n_signos = 0
for letra in frase:
    if letra in vocales:
        n_vocales = n_vocales + 1
    elif letra in consonantes:
        n_consonantes = n_consonantes + 1
    else:
        n_signos = n_signos + 1
print("Tu frase tiene", caracteres_total, "caracteres,", vocales, "vocales y",consonantes,"consonantes")
  #17 (permalink)  
Antiguo 20/12/2014, 09:40
 
Fecha de Ingreso: mayo-2013
Mensajes: 207
Antigüedad: 11 años, 6 meses
Puntos: 31
Respuesta: Como elegir más de un elemento a la vez de una lista

Cita:
Iniciado por 12trunks12 Ver Mensaje
No es que tenga ganas de discutir pero para empezar esto lo hago por diversión, no estoy dando informatica y no voy ni a una universidad, tengo 14 años y lo hago por pura diversión así que no tengo nada que aprobar. Además alguien dijo que me lo hicierais? Solo dije que buscaré mas tarde, que no cierren el tema si lo ven así vacío que ya os digo yo cuando terminé con esto.
Cita:
Iniciado por 12trunks12 Ver Mensaje
A ver te cuento, no estoy aprendiendo por mi cuenta sinó que voy a clases con un profesor. Estos trabajillos los hago en mi tiempo libre y normal que tenga fallos cuando aun no di esa parte, aun así por ejemplo justo ayer aprendimos a hacer el bucle for para cosas como: ...
"Por la boca muere el pez". No estas dando informática, pero no estás aprendiendo por tu cuenta sino yendo a clases con un profesor... Y puede que este trabajillo sea uno de los ejercicios opcionales.

Ya que se tiene profesor, lo suyo seria preguntarle a él las dudas. Además admites que se te queda grande la tarea porque no has visto esa (y otras muchas) parte(s) que se necesitan para completar dicha tarea.

Etiquetas: elegir, elemento, lista, vez
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 15:28.