0

我正在学习这门在线 Python 课程,本课程的一个共同主题是不使用函数或库来解决解决方案。问题问:

定义一个函数 prod(L),它返回列表 L 中元素的乘积。

我的尝试如下。这个特定的问题要求使用for in range,下一个问题使用for in。我了解如何使用for in,但不是for in range。如何使用 0,1,2,3 的范围 i 来帮助计算产品?

范围内循环中断:

def prod(L):
   Llen = len(L)
   for i in range (0,Llen):
      print(L[-1]*L[-2]*L[-3]*L[-4])

prod([1,2,3,4])

我的 for in 循环工作正常。

def prod(L):
   p = 1
   for i in L:
      p *= i
   return p

prod([1,2,3,4])

请不要使用 lambda 或 'from operator import mul'!我理解那些方法。

4

4 回答 4

1

这个想法与 for 几乎相同in。请注意,您不需要从列表长度中创建变量,也不需要为 指定开始,range()默认0情况下。

def prod(L):
    p = 1
    for i in range(len(L)):
        p *= L[i]
    return p

print(prod([1,2,3,4]))  # prints 24
于 2013-09-12T19:12:14.490 回答
0
>>> x = [2,3,4,7]
>>> len(x)
4
>>> range(0,len(x))
[0, 1, 2, 3]
>>> range(len(x))
[0, 1, 2, 3]
>>> def prod(L):
...     p = 1
...     for i in range(len(L)):
...             p = p*L[i]
...     return p
... 
>>> prod(x)
168
于 2013-09-12T19:12:29.970 回答
0

如何解决它的另一种方法(最大递归深度)使用range

def prod (x):
    range (42)
    def prod_ (head, *tail):
        return head if not tail else head * prod_ (*tail)
    return 1 if not x else prod_ (*x)

print (prod ( [1, 2, 5, 19] ) )
于 2013-09-12T19:28:02.193 回答
0

math允许使用库吗?这很容易(这样做numpy有点作弊):

>>> from math import *
>>> def prod(L):
        if 0 in L:
            return 0.
        #elif len(L)==0:
        #    return 0.
        elif sum([item<0 for item in L])%2==0
            return exp(sum(map(log, L)))
        else:
            return -exp(sum(map(log, map(abs, L))))
于 2013-09-12T19:51:59.543 回答