RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1213380
Accepted
марат
марат
Asked:2021-12-03 17:28:46 +0000 UTC2021-12-03 17:28:46 +0000 UTC 2021-12-03 17:28:46 +0000 UTC

如何将列表中的数字相乘?

  • 772

用户在字符串中输入添加到列表中的任何数字

金额可以查到sum(spisok)

如何找到工作?你可以通过for循环

如果例如在一行中如何实施?

python
  • 9 9 个回答
  • 10 Views

9 个回答

  • Voted
  1. Best Answer
    Эникейщик
    2021-12-03T17:47:15Z2021-12-03T17:47:15Z

    过去可以使用 reduce()。现在也是可以的,但是这个函数已经被移到了一个单独的模块中,所以严格来说,计算导入,我们得到两行:

    import functools
    print (functools.reduce(lambda a, b : a * b, lst)) 
    
    • 13
  2. USERNAME GOES HERE
    2021-12-21T19:51:32Z2021-12-21T19:51:32Z

    这里的所有答案都落伍了。python-3.8及更高版本呢?
    数学产品

    import math
    math.prod([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    

    这可能是最简单和最标准的解决方案恕我直言。

    • 10
  3. Mikhail Murugov
    2021-12-03T18:16:36Z2021-12-03T18:16:36Z
    from functools import reduce  # Функция для свёрки последовательности
    from operator import mul  # Функция, перемножающая 2 числа
    
    spisok = [16, 15, 9, 14, 13]  # Исходный список
    
    result = reduce(mul, spisok)
    #                    /\ Список для свёртки
    #               /\ Используем умножение
    #        /\ Сворачиваем контейнер
    
    • 9
  4. Danis
    2021-12-03T17:41:12Z2021-12-03T17:41:12Z

    你可以实现一个功能mul

    def mul(list_):
        n = 1
        for el in list_:
            n *= el
        return n
    

    要么像这样,借助帮助lambda和递归

    mul = lambda arr:arr[0] * mul(arr[1:]) if arr else 1
    
    • 7
  5. Serg Bocharov
    2021-12-03T17:51:28Z2021-12-03T17:51:28Z

    您可以通过导入来做到这一点:

    import numpy as np
    result = np.prod(np.array(mylist))
    
    • 7
  6. Alexander_Sky
    2021-12-03T18:56:40Z2021-12-03T18:56:40Z
    let num = Number(prompt())
    let lis = []
    let mult = []
    
    while (num) {
       num = Number(prompt())
       lis.append(num)
    }
    var m = 1
    for (let n = 0; n < lis.length; n++) {
      m = m*lis[n]
      mult.append(m)
    }
    
    • 4
  7. vadim vaduxa
    2022-06-17T15:47:28Z2022-06-17T15:47:28Z

    如果你真的想,你可以写成一行,当然你不应该那样做,例如,multiply '2 3 4 5' = 120

    print(list(map(lambda s, t=[1]: [t.append(i*t[-1]) for i in map(int, s.split())][0] or t[-1], ['2 3 4 5']))[0])  # 120
    
    • 0
  8. Stanislav Volodarskiy
    2022-06-17T21:05:09Z2022-06-17T21:05:09Z

    我将在一行中给出一个不太实用但很漂亮的解决方案。它不使用eval、列出副作用或命名函数。

    如果允许命名函数,则解决方案可能如下所示:

    def p(a):
        if a:
            return a[0] * p(a[1:])
        return 1
    
    print(p([1, 2, 3, 4, 5]))
    

    它不适合我们,所以命名函数至少需要两行来定义和调用。可以在一行中定义和调用 lambda,但创建递归 lambda 存在困难。Python 语法允许这个技巧:

    p = (lambda a: a[0] * p(a[1:]) if a else 1); print(p([1, 2, 3, 4, 5]))
    

    这正是在同一行上使用全局变量和两个语句的技巧。你完全可以不用全局变量。乍一看,这不可能,因为进行递归调用需要名称。但是一个函数可以作为参数传递给它自己:

    p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
    print(p(p, [1, 2, 3, 4, 5]))
    

    看来我们什么都没赢:无论如何,两个运算符和一个全局变量p。但是,已经采取了非常重要的一步——lambda 的主体不使用全局变量。全局变量在语句中使用print。让我们摆脱它:

    p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
    y = lambda f, a: f(f, a)
    print(y(p, [1, 2, 3, 4, 5]))
    

    它只会变得更糟:三行和两个全局变量。但是每个全局变量只涉及一次。我们做一个替换:

    print((lambda f, a: f(f, a))(lambda f, a: a[0] * f(f, a[1:]) if a else 1, [1, 2, 3, 4, 5]))
    

    它很难阅读,但是没有全局名称和魔术调用,问题就在一行中解决了eval。

    PS 阅读定点组合器以找出该解决方案的来源。

    PPS 还有一个迷人的说法:任何复杂的程序都可以在不定义单个全局变量(包括函数名)的情况下以函数式风格编写。

    PPPS 不要在家里尝试这个。

    • 0
  9. Александр Герасимов
    2022-06-17T02:26:35Z2022-06-17T02:26:35Z
    d = [1, 2, 3, 4, 5]
    print(eval(str(d)[1:-1].replace(',', '*')))
    
    • -1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5