Autor Tema: Lista de listas o multilista en Python.  (Leído 4858 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Lista de listas o multilista en Python.
« en: 02 de Mayo de 2022, 11:37:14 »
Hola Picuino, hola a todos ¿cómo están?, les cuento lo que me pasa con las listas.
Esta es la función.

Código: [Seleccionar]
def verificarMasUna(corregir, total):
    error = indice = 0
    filtro = []
    lenCorregir = len(corregir)
    for linea in total:
        if len(linea) == lenCorregir:   
            for letra in linea:
                letraCor = corregir[indice]
                if letra != letraCor:
                    error += 1
                indice += 1
            if error >= 1 and error <= 2:
                filtro.append(linea)
           
            indice = error = 0

    return filtro

Lo que quiero guardar en cada fila (no encuentro la denominación correcta) es:
La letra
La palabra(linea)
El índice(en el cual se encuentra la(s) letra(s) diferente(s))
El error
Necesito una lista de listas, lo intente con append, extend y nada.-
Desde ya gracias y espero ayuda.-

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Lista de listas o multilista en Python.
« Respuesta #1 en: 02 de Mayo de 2022, 14:41:13 »
Hola Daniel, te adjunto el programa que has enviado un poco mejorado con lo que creo que quieres hacer.

Código: Python
  1. def verificar(palabra, lemario):
  2.     filtro = []
  3.     len_palabra = len(palabra)
  4.     for lema in lemario:
  5.         if len_palabra == len(lema):  
  6.             errores = 0
  7.             for indice in range(len_palabra):
  8.                 if palabra[indice] != lema[indice]:
  9.                     errores += 1
  10.             if errores >= 1 and errores <= 2:
  11.                 filtro.append([lema, errores])
  12.     return filtro

Y un poco más conciso, devolviendo las letras diferentes:
Código: Python
  1. def verificar(palabra, lemario):
  2.     filtro = []
  3.     len_palabra = len(palabra)
  4.     for lema in lemario:
  5.         if len_palabra == len(lema):  
  6.             errores = [a + '->' + b  for a, b in zip(palabra, lema) if a != b]
  7.             if len(errores) >= 1 and len(errores) <= 2:
  8.                 filtro.append([lema, errores])
  9.     return filtro


Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Lista de listas o multilista en Python.
« Respuesta #2 en: 02 de Mayo de 2022, 17:14:22 »
Gracia Picuino, me falta una cosita, no tengo nada de experiencia
con la compresión de listas, por eso te consulto ¿podría insertarse un índice
donde se encuentran las diferencias?, lo que ocurre que las letras pueden
repetirse y luego no sé exactamente cuál intercambiar.-

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Lista de listas o multilista en Python.
« Respuesta #3 en: 02 de Mayo de 2022, 18:32:36 »
Bueno, algo logré, con esto me arreglo.-

Código: [Seleccionar]
def verificar(palabra, lemario):
    filtro = []
    len_palabra = len(palabra)
    indice = 0
    for lema in lemario:
        if len_palabra == len(lema):   
            errores = [ i for i in range(len(palabra)) if palabra[i] != lema[i]]
            if len(errores) >= 1 and len(errores) <= 2:
                filtro.append([lema, errores])
    return filtro

palabra = "abanzar"
Citar
['avanzar', [1]]
['abarcar', [3, 4]]
['abrazar', [2, 3]]
['abundar', [2, 4]]

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Lista de listas o multilista en Python.
« Respuesta #4 en: 03 de Mayo de 2022, 11:19:21 »
Creo que esto es lo que buscas:

Código: Python
  1. def verificar(palabra, lemario):
  2.     filtro = []
  3.     len_palabra = len(palabra)
  4.     for lema in lemario:
  5.         if len_palabra == len(lema):  
  6.             errores = [(i+1, lema[i]) for i in range(len_palabra) if palabra[i] != lema[i]]
  7.             if len(errores) >= 1 and len(errores) <= 2:
  8.                 filtro.append([lema, errores])
  9.     return filtro

palabra = "abanzar"

Resultado:
Código: [Seleccionar]
[
   ['avanzar', [(2, 'v')]],
   ['abarcar', [(4, 'r'), (5, 'c')]],
   ['abrazar', [(3, 'r'), (4, 'a')]],
   ['abundar', [(3, 'u'), (5, 'd')]]
]

Desconectado Daniel1952

  • PIC16
  • ***
  • Mensajes: 127
Re:Lista de listas o multilista en Python.
« Respuesta #5 en: 03 de Mayo de 2022, 11:57:01 »
Siiiii genio total eso es precisamente lo que buscaba/necesitaba, mil gracias.- ((:-)) ((:-)) ((:-))
¿Me parece a mi o el índice en todos los casos se pasa en uno.?

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Lista de listas o multilista en Python.
« Respuesta #6 en: 03 de Mayo de 2022, 12:39:41 »
Es que he añadido uno al índice:

    errores = [(i+1, lema[ i ]) for i in range(len_palabra) if palabra[ i ] != lema[ i ]]

Porque me parecía más natural que la primera letra se nombrase con un 1. Pero claro en Python los índices comienzan en cero. Igual te he liado un poco con eso, pretendía todo lo contrario.

Un saludo.


 

anything