es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo agregar el resultado de una función de impresión a una lista?

Tengo el siguiente def que termina con una función de impresión:

from nltk.corpus import words
nltk.download('words')
correct_spellings = words.words()
from nltk.metrics.distance import jaccard_distance
from nltk.util import ngrams
from nltk.metrics.distance  import edit_distance    

def answer_nine(entries=['cormulent', 'incendenece', 'validrate']):
    for entry in entries:
        temp = [(jaccard_distance(set(ngrams(entry, 2)), set(ngrams(w, 2))),w) for w in correct_spellings if w[0]==entry[0]]
        result = print(sorted(temp, key = lambda val:val[0])[0][1])
    return  result 
answer_nine()

Tengo los tres resultados impresos correctamente, pero me gustaría tenerlos en una lista. Intenté asignarlos a una lista de muchas formas diferentes, pero siempre recibo el siguiente mensaje de error: AttributeError: El objeto de tipo ‘NoneType’ no tiene el atributo ‘append’. No entiendo por qué mi resultado tiene un tipo NoneType si tiene valores, ¿qué me falta aquí?

PD: Si quito la función de impresión así: result = sorted(temp, key = lambda val:val[0])[0][1] Solo recibo la tercera palabra pero al menos es de tipo string.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema es que estás asignando el resultado de la función print a la variable result, la cual es None. En su lugar, debes asignar el resultado de la función sorted a la variable result y luego agregar cada resultado a una lista:

    def answer_nine(entries=['cormulent', 'incendenece', 'validrate']):
        results = []
        for entry in entries:
            temp = [(jaccard_distance(set(ngrams(entry, 2)), set(ngrams(w, 2))),w) for w in correct_spellings if w[0]==entry[0]]
            result = sorted(temp, key = lambda val:val[0])[0][1]
            results.append(result)
        return results
    
    answer_nine()
    

    Esto debería darte la lista de resultados: ['corpulent', 'indecence', 'validate'].

Comments are closed.