Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Por que o uso de += saiu diferente?

Procurei fazer um pouco diferente:

def separa_palavras(lista_tokens):
  lista_palavras = []
  for token in lista_tokens:
    if token.isalpha():
      # Professor digitou:
      # lista_palavras.append(token)
      lista_palavras += token
  return lista_palavras

para:

palavras_separadas = nltk.tokenize.word_tokenize('Olá, como vai?')
palavras_separadas

['Olá', ',', 'como', 'vai', '?']

O que resultou em:

separa_palavras(palavras_separadas)

['O', 'l', 'á', 'c', 'o', 'm', 'o', 'v', 'a', 'i']

Por que lista_palavras.append(token) resulta diferente de lista_palavras += token?

1 resposta
solução!

Olá,

A diferença entre += e .append() está na inserção dos itens na lista:

  • +=: funciona semelhantemente ao método de lista .extend(), no qual ele adiciona vários itens à lista, mantendo a característica de ser uma lista de uma dimensão. Por exemplo, passar um iterável, como uma lista, a esse método, ele adicionará cada um:
lista = [1, 2, 3]
lista.extend([4, 5, 6])
# lista --> [1, 2, 3, 4, 5, 6]

lista = [1, 2, 3]
lista += [4, 5, 6]
# lista --> [1, 2, 3, 4, 5, 6]

Como uma string é iterável, então ele itera por cada caractere e o adiciona, gerando sua lista de exemplo com letras separadas por vírgula.

  • .append(): Adiciona um objeto de cada vez. Se adicionar uma lista usando o .append(), ele adicionará a lista por completo, deixando sua lista com mais de 1 dimensão, haverá uma lista dentro de uma lista.
    lista = [1, 2, 3]
    lista.append([4, 5, 6])
    # lista --> [1, 2, 3, [4, 5, 6]]

A lista foi adicionada por completa, independentemente de ser um iterável. No caso do seu exemplo, ela adiciona o objeto string palavra por completo, gerando o resultado desejado de tokenização.

Para mais formas de adicionar itens a uma lista e suas explicações, esse site contém.

Espero ter ajudado.