这是一个非常简单的代码:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = 1
c = [b*=i for i in a]
print(c)
我试图将列表a中的所有数字相乘,但是在第3行出现语法错误。如何修复代码?
答案 0 :(得分:2)
=
和类似的增强版本不是计算结果为值的表达式。问题是that's what list comprehensions are expecting:一个表达式。
理解由单个表达式组成,后跟至少一个for子句和零个或多个for或if子句。
为此,您需要Python 3.8和assignment expressions:
[b := b * i for i in a]
没有结合了*
和:=
的增强版本。
不过请考虑使用完整循环。
答案 1 :(得分:1)
对此的另一个选择是:
import operator
from functools import reduce
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = reduce(operator.mul, a, 1)
print(b)
顺便说一下,这个问题是这样引用的:
What's the function like sum() but for multiplication? product()?
编辑:如@ShadowRanger所述,从Python 3.8开始,您可以将其简化为:
import math
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = math.prod(a)
print(b)
答案 2 :(得分:0)
如评论中所述,您不能在列表理解内进行项目分配。你能做的就是
b=1
for x in a:
b*=x
print(b)