-3

Here is a very simple code:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = 1
c = [b*=i for i in a]
print(c)

I am trying to multiply all of the numbers in the list a, but I get a syntax error for line 3. How can I fix the code?

TheRealTengri
  • 1,201
  • 1
  • 7
  • 17

3 Answers3

2

= and the augmented versions like it aren't expressions that evaluate to a value. The issue is, that's what list comprehensions are expecting: an expression.

The comprehension consists of a single expression followed by at least one for clause and zero or more for or if clauses.

To do this, you'd need Python 3.8 and assignment expressions:

[b := b * i for i in a]

There is no augmented version that combines * and :=.

Consider just using a full loop though.

Carcigenicate
  • 43,494
  • 9
  • 68
  • 117
1

Another option for this is the following:

import operator
from functools import reduce

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

b = reduce(operator.mul, a, 1)

print(b)

By the way, this was referenced in this question:

What's the function like sum() but for multiplication? product()?

EDIT: As noted by @ShadowRanger, starting in Python 3.8 you could simplify this to:

import math

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

b = math.prod(a)

print(b)
Rfroes87
  • 668
  • 1
  • 5
  • 15
0

As mentioned in the comments, you can't do item assignment inside of a list comprehension. What you could do is

b=1
for x in a:
    b*=x
print(b)
Daniel Walker
  • 6,380
  • 5
  • 22
  • 45