【问题标题】:Product function of elements in a list列表中元素的乘积函数
【发布时间】:2016-11-02 16:47:04
【问题描述】:

我是 python 编程语言的新手,目前我无法在列表中编写产品的 python 函数。

给定aList = [1,2,3,4,5],我们需要编写一个python函数“product”来返回列表中项目的乘积。例如,product(aList[1:3]) 将返回 24。

我做过研究,但到目前为止我还没有弄清楚。这是我想出的,但它是错误的。

def product(l):
    p = 1
    for i in range(0, len(l)):
        p = p*i
    return p

print(product(aList[1:3])

关于如何获得所需输出的任何想法?另外,由于我对python比较陌生,所以不建议使用numpy等内置函数。

【问题讨论】:

  • 你在乘以索引,你需要乘以列表的元素,而不是索引。
  • 注意aList[1:3][2,3],所以乘积是6。

标签: python


【解决方案1】:

reduceoperator.mul 一起使用:

>>> import functools
>>> import operator
>>> functools.reduce(operator.mul, [1, 2, 3, 4, 5])
120

在 python 2 中,您可以使用 reduce 而不包括 functools(它是内置的)。

您也可以将operator.mul 替换为lambda x,y: x*y

【讨论】:

    【解决方案2】:

    如果您想将值相乘,则使用索引毫无意义。直接遍历列表即可

    def product(l):
        p = 1
        for i in l:
            p = p*i
        return p
    
    print(product(aList[1:3]))
    

    如果出于某种原因,您需要遍历索引,只需确保使用给定索引处的列表项,而不是索引本身(特别是因为您将从 0 开始并最终获得 0如果你按索引)

    def product(l):
        p = 1
        for i in range(0, len(l)):
            p = p*l[i]
        return p
    
    print(product(aList[1:3]))
    

    (另请注意,您的打印件中缺少括号)

    【讨论】:

    • 记得保留空格:p = p * i 或更好:p *= i
    • 在大多数情况下,您可能希望在迭代时使用for i, v in enumerate(l) 来获取索引值。
    • @brianpck 认为除了特定问题之外最好保持代码不变,而不是挑剔它们的格式。
    • @brianpck PEP-8 强烈鼓励使用空格,但在语法上不是必需的。
    • alist[1:3] 的乘积永远不会是 24,因为aList[1:3] == [2,3]enumerate 不会改变这一点;它只是返回一个由索引和值组成的元组列表。 enumerate(aList[1:3]) == [(1,2), (2,3)].
    【解决方案3】:

    如果您使用的是 Python 2,则可以使用 python reduce 函数来实现此目的

    aList = [1,2,3,4,5],
    print reduce(lambda x,y:x*y, aList)
    

    输出

    120
    

    【讨论】:

    • 请注意,reduce 不是 Python3 的内置函数,OP 似乎正在使用它。
    【解决方案4】:

    您可以遍历列表中的每个元素来获取产品。像这样:

    def get_product_of_list(some_list):
        product = 1
    
        for number in some_list:
            product = product * number
    
        return product
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多