1
resposta

List () vs []

Ao acompanhar a aula, ao escrever a função abaixo, na definição da variável 'candidatos', eu utilizei a função 'list()', como exemplificado:

def novo_corretor(palavra):
    palavras_geradas = gerador_palavras(palavra)
    palavras_turbinado = gerador_turbinado(palavras_geradas)
    todas_palavras = set(palavras_geradas + palavras_turbinado)
    candidatos = list(palavra)
    for palavra in todas_palavras:
        if palavra in vocabulario:
            candidatos.append(palavra)
    print(len(candidatos))
    palavra_correta = max(candidatos, key=probabilidade)
    return palavra_correta

porém, dessa maneira, estava obtendo o resultado equivocado tanto para 'len(candidatos)' e para 'return palavra_correta', obtendo como resultado 9 e 'a', respectivamente.

Ao tentar resolver o problema, alterei a única diferença entre meu código e o código do instrutor, no vídeo.

def novo_corretor(palavra):
    palavras_geradas = gerador_palavras(palavra)
    palavras_turbinado = gerador_turbinado(palavras_geradas)
    todas_palavras = set(palavras_geradas + palavras_turbinado)
    candidatos = [palavra]
    for palavra in todas_palavras:
        if palavra in vocabulario:
            candidatos.append(palavra)
    print(len(candidatos))
    palavra_correta = max(candidatos, key=probabilidade)
    return palavra_correta
novo_corretor(palavra)

Dessa maneira, a única alteração no código foi a utilização da abertura de chave '[]' no lugar da função 'list()' ao definir a variável 'candidatos'. Com essa mudança obtive o resultado correto tanto para 'len(candidatos)' e 'return palavra_correta', 2 e 'lógica', respectivamente.

Apesar de corrigir o código e obter o resultado esperado, não compreendi como uma mudança em métodos que, até onde meu conhecimento vai, são quase idênticos, alterou tão drasticamente o output do código. Alguém poderia me explicar?

1 resposta

Olá Pedro,

Quando você usa:

a = list("teste")

O list do python recebe um iterável, então ele cria uma lista com cada um dos elementos desse iterável! E a string é um "iterável", assim cada caracter da sua string vira uma posição na da sua lista.

Então a saída de há seria:

in: print(a)
out: ["t", "e", "s", "t", "e"]

Por isso que seu resultado foi diferente, pq vc quer uma lista de palavras e não uma lista de caracteres!

Att.