【问题标题】:python multiply each item in sublists by a listpython将子列表中的每个项目乘以一个列表
【发布时间】:2017-04-28 04:32:03
【问题描述】:

我有一个子列表,例如:

t = [ [1, 2, 3, 4], [2, 5, 7, 9], [7, 9, 11, 4] ]

我想将每个子列表乘以一个列表,这样每个子列表中的第一项乘以乘数列表中的第一项,每个子列表中的第二项乘以乘数列表中的第二项,等等。乘数列表是:

乘数 = [0.1, 0.3, 0.5, 0.8]

所以最终的结果会是这样的:

结果 = [ [0.1, 0.6, 1.5, 3.2], [0.2, 1.5, 3.5, 7.2], [0.7, 2.7, 5.5, 3.2] ]

我该怎么做?很抱歉,如果有人问过这个问题,我已经搜索了几个小时,但没有找到确切适用的内容。

【问题讨论】:

    标签: python sublist


    【解决方案1】:

    实际上,numpy 更容易:

    import numpy as np
    t = np.array([ [1, 2, 3, 4], [2, 5, 7, 9], [7, 9, 11, 4] ])
    multiplier = np.array([0.1, 0.3, 0.5, 0.8])
    answer = t * multiplier
    

    【讨论】:

      【解决方案2】:
      total_result = list()
      for v in t:
          result = list()
          for num, mul in zip(v, multiplier):
              result.append(round(num*mul, 2))
          total_result.append(result)
      

      或者只有一行

      total_result = [[round(num*mul, 2) for num, mul in zip(v, multiplier)] for v in t]
      

      total_result

      [[0.1, 0.6, 1.5, 3.2], [0.2, 1.5, 3.5, 7.2], [0.7, 2.7, 5.5, 3.2]]
      

      【讨论】:

        【解决方案3】:

        numpy(Numpy) 会处理这一切:

        import numpy as np
        t = np.array([ [1, 2, 3, 4], [2, 5, 7, 9], [7, 9, 11, 4] ])
        multiplier = np.array([0.1, 0.3, 0.5, 0.8])
        
        new_t = [e*multiplier for e in t]
        

        【讨论】:

          【解决方案4】:

          Numpy 可能是最简单的解决方案,但如果你不想这样做:

          t = [[1, 2, 3, 4], [2, 5, 7, 9], [7, 9, 11, 4]]
          multiplier = [0.1, 0.3, 0.5, 0.8]
          
          def mult_lists(operator_list, operand_list):
              # Assuming both lists are same length
              result = []
              for n in range(len(operator_list)):
                  result.append(operator_list[n]*operand_list[n])
              return result
          
          multiplied_t = list(map(lambda i: mult_lists(multiplier, i), t)))
          

          mapt中的每一项都调用mult_lists函数,然后排列成一个列表。

          【讨论】:

            【解决方案5】:

            您可以使用列表推导:

            [[li[i]*multiplier[i] for i in range(len(multiplier))] for li in t]
            

            为清楚起见,扩展迭代版本为:

            new_list = []
            for li in t:
                new_list.append([li[i]*multiplier[i] for i in range(len(multiplier))])
            

            ...

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-08-19
              • 2021-12-22
              • 2022-01-07
              • 2017-11-05
              • 1970-01-01
              • 2023-01-08
              • 2022-11-07
              相关资源
              最近更新 更多