No se puede usar el operador * = python en la lista de comprensión

No estoy seguro de por qué no puedo usar el operador *= en una lista de comprensión, cuando usarlo en un bucle for está bien.

 def funcLC(l): ans = 1 [ans *= x for x in l if x < 0] return ans SyntaxError: invalid syntax def funcFor(l): ans = 1 for x in l: if x < 0: start *= x return ans 

El operador de asignación (y todas las variaciones en él) forman una statement en Python, no una expresión . Desafortunadamente, las comprensiones de listas (y otras comprensiones, como conjuntos, diccionarios y generadores) solo admiten expresiones.

Alternativamente, puedes acercarte a reduce() y filter() :

 >>> from operator import mul >>> from functools import reduce # needed if Python 3.x >>> >>> l = [-1, 2, 4, 1, -3] >>> reduce(mul, filter(lambda x: x < 0, l), 1) 3 

Una sugerencia relacionada: uno de los indicadores para usar reduce() es que tiene varios valores, pero necesita producir un único valor a partir de él.