我是python中的新手,我编写的代码使列表中的项目产品不使用乘法符号:
def witOutmultiply(some_list):
first_num = some_list[0]
result = 0
for n in some_list[1:]:
for i in range(n):
result += first_num
first_num = result
result = 0
return first_num
q =[2,4,5,6,10,15]
print(witOutmultiply(q))
我的问题是:在这种情况下我可以使用理解吗?我能用一个循环得到结果吗?感谢
答案 0 :(得分:4)
是的,您可以使用列表理解,sum
和range
,但不能使用其他内置函数:
q = [2,4,5,6,10,15]
mult = q[0]
for n in q[1:]:
mult = sum(mult for _ in range(n))
print(mult)
#36000
答案 1 :(得分:3)
这是一个没有循环的答案,满足你的“没有乘法符号”的条件。因此非常快。 reduce
函数在iterable的成员之间重复操作,将其减少为单个值,而mul
函数将两个数相乘。如果iterable(list)为空,1
函数末尾的reduce
给出一个合理的值。看不到乘法信号!
from operator import mul
from functools import reduce
def prod_seq(seq):
"""Return the product of the numbers in an iterable."""
return reduce(mul, seq, 1)
答案 2 :(得分:1)
理解用于构建数据结构。列表理解构建一个列表,一个字典理解构建一个字典等等。由于你在计算中想要一个单独的值而不是一个数据结构,所以没有理由使用理解。
可能有一些方法可以避免使用两个循环,但它并不容易,因为你的外部循环执行多个操作,而不仅仅是一个操作。避免显式循环的大多数简单方法只是隐藏一些函数调用中的一个或多个循环,如sum
。我认为对于您选择的算法(通过添加进行乘法),您当前的代码非常好,并且没有明显的方法来改进它。
答案 3 :(得分:1)
from numpy import prod
print(prod(q))
#36000