2016-09-22 100 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