elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Consulta] Índice en listas anidadas (Python)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Consulta] Índice en listas anidadas (Python)  (Leído 8,493 veces)
evanescense

Desconectado Desconectado

Mensajes: 4



Ver Perfil
[Consulta] Índice en listas anidadas (Python)
« en: 14 Junio 2016, 00:31 am »

Buenos días a todos, quería hacerles una consulta. Estoy aprendiendo Python y tengo que hacer un programa que evalue la distancia entre dos elementos en una grilla. Se le pide al usuario que ingrese dos números, y el programa calcularía la distancia entre ellos con el Teorema de Pitágoras (suponemos la distancia entre dos elementos adyacentes horizontal o verticalmente es 1)

Ahora, el problema aparece porque si yo creo una lista con listas anidadas (algo como miLista = [[1, 2], [3, 4]]) y utilizo el método miLista.index(3), el método no arroja resultados porque está anidada. ¿Existe alguna forma de lograr sacar el índice del elemento para asignarle unas cordenadas y así poder calcular la distancia?

Muchas gracias por vuestra ayuda. Saludos

1 2 3
4 5 6
7 8 9


En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: [Consulta] Índice en listas anidadas (Python)
« Respuesta #1 en: 14 Junio 2016, 04:19 am »

en principio está bien tu deducción, lo que te faltó es que en las listas anidadas para cada item hay un doble indice, algo así:
Código
  1. miLista = [[1, 2], [3, 4]]
  2.  
  3. elemento0=miLista[0][0]
  4. elemento4=miLista[1][1]
  5. print(elemento0)
  6. print(elemento4)

espero que se entienda.


En línea

evanescense

Desconectado Desconectado

Mensajes: 4



Ver Perfil
Re: [Consulta] Índice en listas anidadas (Python)
« Respuesta #2 en: 14 Junio 2016, 04:55 am »

Buenos días tincopasan, antes que nada, muchas gracias por tu respuesta. Sí, se entendió muy bien lo que me dijiste. El tema es que, aunque sí puedo acceder a determinado elemento en la lista anidada si conozco su índice, el problema me apareció cuando yo conozco el elemento, pero no su índice.

Aquí pongo el resultado que me arroja el IDLE cuando creo una lista así y utilizo el método index en ella:


Código:
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> miLista = [1,2,3]
>>> miLista.index(3)
2
>>> miListaAnidada = [[1, 2], [3, 4]]
>>> miListaAnidada.index(3)
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    miListaAnidada.index(3)
ValueError: 3 is not in list
>>>

Recién estuve charlando con un amigo sobre esto y me recomendó que chequee si el elemento en cuestión está dentro de cada una de las sublistas con un ciclo for, aunque sería una lástima que no haya un procedimiento más simple
En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: [Consulta] Índice en listas anidadas (Python)
« Respuesta #3 en: 14 Junio 2016, 06:45 am »

efectivamente, sino tenés la menor idea en cual sublista se encuentra el item, deberás recorrerla con un for, ahora, si sabés en que sublista puede estar es más fácil:
Código
  1. lista=[[1,2,6,4,5],[7,8,9,10]]
  2. print(lista[1].index(9))
  3.  
que es lo que te dije antes de los índices, desconozco si hay una función más simple sin el for en el caso de tener que recorrer la lista y sublistas.
En línea

peter_lyon

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: [Consulta] Índice en listas anidadas (Python)
« Respuesta #4 en: 25 Junio 2016, 03:59 am »

La función index va a buscar el elemento tal cual en la lista.
En python no existe como tal el concepto de lista anidada, una lista puede contener cualquier cosa, incluso listas, pero no deja de ser una lista como otra cualquiera.

Si tienes por ejemplo
miLista = [[1, 2], [3, 4]]

index solo te va a funcionar con:

miLista.index([1,2])   y   miLlista.index([3,4])


La solución es un poco compleja, pero de eso se trata, de ir aprendiendo y avanzando para llegar a ser un buen programador, no debes tener miedo a usar instrucciones más potentes, como "for" o "in" que son instrucciones con una semántica muy parecida al lenguaje natural (una de las grandes ventajas de python) y puedes llegar a hacer grandes cosas con ellas:

def indices(lista, elm):
  for fila in lista: # para cada fila en la lista
    if elm in fila:   # Si el elmento (elm) está en esta fila
      return ( lista.index(fila) ,  fila.index(elm) ) # Devolvemos una tupla de dos elementos, la posición de la fila dentro de la grilla,
                          # y la posición del elm en la fila (columna).
  return (None, None) # Si no la encontramos en ninguna fila devolvemos una tupla con 2 elementos nulos.


Aunque ahora te pueda parecer complicado, leelo con calma, entiéndelo, puedes copiarlo y pegarlo tal cual en tu consola python y funcionará. Es muy importante que lo entiendas, si no no sirve para nada, si no entiendes algo pregúntame.

Si te das cuenta han bastado 5 líneas de código para definir una función que encuentra los 2 índices de un elemento en una matriz y si no los encuentra devuelve valores nulos. Además la sintaxis parece seudocódigo y es muy fácil de entender comparado con otros lenguajes.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
listas desplegables anidadas
PHP
m0m0 4 6,354 Último mensaje 19 Mayo 2009, 15:18 pm
por cassiani
seleccionar indice del resultado de la consulta sql
PHP
diego_lp 1 3,824 Último mensaje 27 Abril 2010, 08:51 am
por Nakp
[Python]Calcular indice de masa corporal y decir el estado
Scripting
word93 1 11,935 Último mensaje 28 Agosto 2010, 03:10 am
por Karcrack
[Python]Índice de la lista fuera de rango
Scripting
Arnau27 1 3,828 Último mensaje 3 Enero 2014, 22:30 pm
por Max00355
[AYUDA] Listas anidadas?
Programación C/C++
carlosabcs18 4 4,992 Último mensaje 5 Noviembre 2014, 03:27 am
por carlosabcs18
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines