2016-09-22 53 views
1

我不確定爲什麼我無法在列表理解中使用*=運算符,在for循環中使用它時很好嗎?無法在列表理解中使用* = python運算符

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 
+3

列表理解不僅僅是孩子們寫循環的方式。他們用於*建立名單*。如果你不想建立一個列表,列表解析不是工作的工具。 – user2357112

+0

我以前不知道,現在我做,謝謝。 – McLeodx

回答

3

賦值運算符(和其上的所有的變化)在Python,而不是一個表達形成語句。不幸的是,列表理解(以及其他理解,如集合,字典和生成器)僅支持表達式。

3

或者,也可以與reduce()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 

一個相關的提示:指標之一使用reduce()是,你有多個值,但需要產生單一值超出它。

+0

非常感謝Alexce – McLeodx