Autor
|
Tema: [Consulta] Índice en listas anidadas (Python) (Leído 8,493 veces)
|
evanescense
Desconectado
Mensajes: 4
|
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
|
|
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
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í: miLista = [[1, 2], [3, 4]] elemento0=miLista[0][0] elemento4=miLista[1][1] print(elemento0) print(elemento4)
espero que se entienda.
|
|
|
En línea
|
|
|
|
evanescense
Desconectado
Mensajes: 4
|
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: 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
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
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: lista=[[1,2,6,4,5],[7,8,9,10]] print(lista[1].index(9))
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
Mensajes: 19
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
listas desplegables anidadas
PHP
|
m0m0
|
4
|
6,354
|
19 Mayo 2009, 15:18 pm
por cassiani
|
|
|
seleccionar indice del resultado de la consulta sql
PHP
|
diego_lp
|
1
|
3,824
|
27 Abril 2010, 08:51 am
por Nakp
|
|
|
[Python]Calcular indice de masa corporal y decir el estado
Scripting
|
word93
|
1
|
11,935
|
28 Agosto 2010, 03:10 am
por Karcrack
|
|
|
[Python]Índice de la lista fuera de rango
Scripting
|
Arnau27
|
1
|
3,828
|
3 Enero 2014, 22:30 pm
por Max00355
|
|
|
[AYUDA] Listas anidadas?
Programación C/C++
|
carlosabcs18
|
4
|
4,992
|
5 Noviembre 2014, 03:27 am
por carlosabcs18
|
|