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

アレックス – McLeodx

関連する問題