【问题标题】:Multiply items in list [duplicate]将列表中的项目相乘[重复]
【发布时间】:2021-02-26 15:14:49
【问题描述】:

我正在尝试编写一个函数(出于学术原因),将该列表中的每个数字相乘:list = [6 , [1, 2, 3]] 我已经尝试过这个解决方案:

def grow(arr):
    for num in arr:
        x = num
        x * num
        for value in num:
            y = value * num
        return y * x   

但我不断收到:TypeError: 'int' object is not iterable 有人请帮我理解。 预期的输出应该是:36。 该函数应该这样做:6 * 1 * 2 * 3

【问题讨论】:

  • 预期输出是什么?
  • 感谢您的评论我已修复它
  • 检查我的答案。您可以传递任何类型的列表,它将计算该值。甚至可以为此工作:li = [[[4] ,3, [1, 2, 3]]]

标签: python list loops


【解决方案1】:

你可以试试:

def flatten(li):
    try:
        for item in li:
            yield from flatten(item)
    except TypeError:
        yield li

li = [6,[1, 2, 3]]
l = [fi for fi in flatten(li)]
reduce(lambda x,y: x*y, l)

36

【讨论】:

    【解决方案2】:

    或者类似于answer 之一,它首先使用flatten 将嵌套列表展平,然后使用numpy prod 计算交叉乘法。

    import numpy  as np
    def flatten(li):
        try:
            for item in li:
                yield from flatten(item)
        except TypeError:
            yield li
    
    li = [6,[1, 2, 3]]
    list1 = [fi for fi in flatten(li)]
    
    result1 = np.prod(list1)
    

    最初,OP 根据以下代码接受建议

    提取嵌套列表

    num, val_list = [6 , [1, 2, 3]]
    

    将列表中的所有值相乘并相加

    expected_output=sum([value * num for value in val_list])
    

    作为一个函数:

    def grow(arr):
     num, val_list = arr
     return sum([value * num for value in val_list])
    
    
    my_arr= [6 , [1, 2, 3]]
    data=grow(my_arr)
    

    【讨论】:

    • 您的答案看起来是正确的,但我无法将其转化为函数,您能帮帮我吗?
    • 你也打错了总和,但你的解决方案是最干净的
    • 错误的 sum call 是什么意思?
    • 你测试过你的代码吗?
    • 非常感谢您的帮助,但没有奏效。我有一个 ValueError
    【解决方案3】:

    如果您非常确定 arr 将始终只包含两个条目,例如 [6, [1, 2, 3]],则上述解决方案是不错的选择。但是,如果有人提供了这样的东西 - [1, [2, 3, 4], 5, 6, [2, 4, 5]]。如果所有值都是整数,您可以执行以下操作:

    def grow(arr):
        temp = list()
        for i in arr:
            if type(i) == int:
                temp.append(i)
            else:
                temp.extend(i)
    
        return temp
    

    现在所有元素都已被纳入新列表temp,您可以import math 并执行math.prod(temp)

    【讨论】:

      【解决方案4】:
      def grow(arr):
          for num in arr:
              x = num
              x * num
              for value in num:
                  y = value * num
              return y * x
      

      当您的外部for 循环迭代时,它会在列表中找到两个元素:6[1, 2, 3]。因此,第一次通过该循环时,num6

      因此,你内心的for 解析为

              for value in 6:
      

      这是不可能的。相反,您需要按顺序获取两个列表元素,而不是作为嵌套循环。

      num, val_list = arr
      for value in val_list:
          y = value * num
      

      这解决了您的直接问题。我将把其他错误留给你。您仍然必须存储所有三种产品;在上面的循环中,你用最后一个覆盖前两个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-25
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        • 1970-01-01
        • 2019-01-31
        • 2017-07-23
        相关资源
        最近更新 更多