Python 3+ - 用于范围循环,乘法,乘积,列表不使用mul或lambda或用于循环

时间:2013-09-12 19:09:46

标签: python list for-loop product

I'm taking this online Python course本课程的一个共同主题是不使用函数或库来解决问题。问题是:

  

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

我的尝试如下。这个具体问题要求在范围内使用,下一个问题用于。我理解如何使用in,但不适用于范围。如何使用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])

我的in循环工作正常。

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

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

请不要lambda或'来自运营商导入mul'!我理解那些方法。

4 个答案:

答案 0 :(得分:1)

这个想法与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

答案 1 :(得分: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

答案 2 :(得分: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] ) )

答案 3 :(得分: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))))