Al hacer una lista de elementos de otra lista, se convierte en un Tipo de Ninguno

Estoy tratando de crear una lista de palabras usando palabras de una lista separada de palabras. Por ejemplo:

>>> stuff = ['this', 'is', 'a', 'test'] >>> newlist = [stuff[0]] >>> newlist ['this'] 

Sin embargo, estoy encontrando un problema en mi código en el que trato de hacer esto, y convierte la nueva lista en un objeto NoneType.

Este es el código que está lanzando un error:

 markov_sentence = [stuff[0]] for i in range(100): if len(markov_sentence) > 0: if words_d[markov_sentence[-1]] != []: newword = random.choice(words_d[markov_sentence[-1]]) markov_sentence = markov_sentence.append(newword) else: break return markov_sentence 

La variable ‘cosas’ es una lista de palabras de cadena tomadas de la entrada del usuario. ‘words_d’ es un diccionario creado anteriormente, que no es importante en este momento:

 stuff = input("Input a series of sentences: ") stuff = stuff.split()[:-1] #this is here because there was an empty string at the end 

Cuando bash ejecutar el progtwig, obtengo esto:

 Input a series of sentences: this is a test this should work Traceback (most recent call last): File "/u/sbiederm/markov.py", line 32, in  main() File "/u/sbiederm/markov.py", line 29, in main print(markov(stuff)) File "/u/sbiederm/markov.py", line 18, in markov if len(markov_sentence) > 0: TypeError: object of type 'NoneType' has no len() 

¿Alguien puede explicarme por qué la lista se está convirtiendo en un tipo de Ninguno? He intentado una variedad de métodos para tratar de solucionar esto, pero simplemente no puedo resolverlo.

EDITAR:

He intentado esto y he recibido el mismo error:

 markov_sentence = [] markov_sentence.append(stuff[0]) Traceback (most recent call last): File "C:\Python34\markov.py", line 33, in  main() File "C:\Python34\markov.py", line 30, in main print(markov(stuff.split())) File "C:\Python34\markov.py", line 20, in markov if len(markov_sentence) > 0: TypeError: object of type 'NoneType' has no len() 

He mirado otras preguntas y no explican por qué esto está sucediendo en mi código. Entiendo que .append () devuelve Ninguno. Esto no es lo que está pasando aquí.

El método list.append muta una lista en el lugar y devuelve None . Es decir, debe llamarlo en su propia línea sin asignarlo a markov_sentence :

 newword = random.choice(words_d[markov_sentence[-1]]) markov_sentence.append(newword) 

De lo contrario, markov_sentence se asignará a None :

 >>> lst = [1, 2, 3] >>> print(lst) [1, 2, 3] >>> lst = [1, 2, 3].append(4) >>> print(lst) None >>>