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

Смежные вопросы