Enumere los valores de retorno de comprensión más , ¿por qué?

Estoy estudiando comprensiones. Obtengo la parte impresa (x) (creo. Imprime el valor de x que pasa la prueba ‘in’), pero ¿por qué también devuelve una lista de Ninguno después?

>>> g ['a', 'x', 'p'] >>> [print(x) for x in g] a x p [None, None, None] #whats this? 

Utiliza una lista de comprensión para imprimir los elementos de la lista y, a continuación, se imprime la lista. Trate de asignar la lista a una variable en su lugar.

 >>> g ['a', 'x', 'p'] >>> x = [print(x) for x in g] a x p # 

Ahora la lista está en x y no está impresa. La lista sigue ahí …

 >>> print(x) [None, None, None] >>> x [None, None, None] 

print es una función (en Python3). Imprime algo en la pantalla, pero devuelve Ninguno.

En Python2, print es una statement. [print(x) for x in g] habría generado un SyntaxError ya que solo las expresiones, no las declaraciones, se pueden usar en las listas de comprensión. Una llamada de función es una expresión, por lo que se permite en Python3. Pero como puede ver, no es muy útil utilizar la print en una lista de comprensión, incluso si está permitido.

 [print(x) for x in g] 

es equivalente a:

 l = [] for i in g: l.append(print(i)) return l 

La impresión hace las cosas de impresión, por lo que ve a, x y p, pero devuelve None por lo que la lista que aparece al final es [Ninguno, Ninguno, Ninguno]

Creo que estás combinando una lista de comprensión con el método str.join .

Una lista de comprensión siempre produce una nueva lista . Se puede producir una lista de tres formas que es la misma que g

 >>> [x for x in 'axp'] ['a', 'x', 'p'] >>> [x[0] for x in ['alpha', 'xray', 'papa']] ['a', 'x', 'p'] >>> list('axp') ['a', 'x', 'p'] 

Como g ya es una cadena, usas la combinación para producir una sola cadena para imprimirla:

 >>> g=['a', 'x', 'p'] >>> ''.join(g) 'axp' 

Para imprimirlo, solo usa unir con el separador deseado:

 >>> print('\n'.join(g)) a x p 

Necesitaría utilizar una comprensión si los elementos de la lista no son compatibles con unirse por ser cadenas:

 >>> li=[1,2,3] >>> '\n'.join(li) Traceback (most recent call last): File "", line 1, in  TypeError: sequence item 0: expected str instance, int found >>> print('\n'.join(str(e) for e in li)) 1 2 3