Estoy sorprendido por el comportamiento de List Comprehension
en un list
de lists
. Esperaría que List comprehension
me devuelva una nueva lista SIEMPRE. Por ejemplo:
>>> L = [1,2,3,4,5,6]
>>> M = [ x * 2 for x in L]
>>> L
>>> [1,2,3,4,5,6]
>>> M
>>> [2,4,6,8,10,12]
Entonces L
no se cambia.
Sin embargo
>>> L = [[1], [2], [3]]
>>> M = [x.append(100) for x in L]
>>> M
>>> [None, None, None]
>>> L
>>> [[1,100], [2,100], [3,100]]
Ahora L se cambia y list comprehension
no devuelve una nueva Lista.
Espero una nueva Lista por la comprensión de la lista. Cualquier explicación me ayudaría a comprender este comportamiento de list comprehension
3 respuestas
x * 2
es una expresión que se evalúa como resultado y su resultado se almacenará en la lista M
.
x.append(100)
por otro lado aplica la función append()
en el objeto x
, que es un elemento de la lista L
y devuelve None
.
Es lo mismo, por qué haces y = x * 2
, pero no y = x.append(100)
.
Usted está agregando a x
, es un elemento en L
, es por eso que L
cambia. Si desea una nueva lista, no mute una anterior, cree una nueva.
No especificas el resultado que esperas, pero creo que esto es lo que estás buscando:
>>> L = [[1], [2], [3]]
>>> M = [[*x, 100] for x in L]
>>> L
[[1], [2], [3]]
>>> M
[[1, 100], [2, 100], [3, 100]]
x.append(100)
No devuelva nada (Ninguno), por eso solo tiene Ninguno dentro de M.
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.