【问题标题】:How to perform calculations with multiple lists?如何使用多个列表执行计算?
【发布时间】:2021-03-02 14:32:47
【问题描述】:

所以我有 4 个列表,其中 2 个在函数内部创建,2 个在函数外部创建。

list_3 = []
list_4 = []
def create_list_3_4():
    a = 4
    b = 5
    list_3.append(a) 
    list_3.append(b)

    c = 8
    d = 9
    list_4.append(c)
    list_4.append(d)

    return list_3, list_4

list_1 = [10.5, 8.5]
list_2 = [12.6, 11.5]


value_1 = [x[0] for x in list_1] - [x[0] for x in list_2]
value_2 = [x[0] for x in create_list_3_4()] - [[x[0] for x in create_list_3_4()]]
value_3 = value_2 / value_1
new_list = []
new_list.append(value_3)
print(new_list)

对于list_2 中的每个项目,我想减去list_1 中的每个项目。所以12.6 - 10.511.5 - 8.5 等.. 对于函数内的列表,我也想做同样的事情。所以8 - 49 - 5 等等...

最终我想将12.6 - 10.58 - 4 的答案分开并将其放入 new_list.

这是我当前的输出:

    value_1 = [x[0] for x in list_1] - [x[0] for x in list_2]
TypeError: 'float' object is not subscriptable

这是我想要的输出:

[1.904, 1.333]

计算的额外信息:

1.904 = (8 - 4 = 4 / 12.6 - 10.5 = 2.1)
1.333 = (9 - 5 = 4 / 11.5 - 8.5 = 3)

【问题讨论】:

    标签: python list integer calculation


    【解决方案1】:

    这可以通过列表解析来实现,正如您已经开始的那样,以及zip() 函数:

    list_1 = [10.5, 8.5]
    list_2 = [12.6, 11.5]
    value_1 = [num_2 - num_1 for num_1, num_2 in zip(list_1, list_2)]
    

    对于第二部分,您需要在最终理解之前定义 list_3list_4

    list_3, list_4 = create_list_3_4()
    value_2 = [num_2 - num_1 for num_1, num_2 in zip(list_3, list_4)]
    

    然后划分列表:

    value_3 = [num_2 / num_1 for num_1, num_2 in zip(value_1, value_2)]
    

    这些步骤可以组合起来以减少运行时间(尽管如果您想要更清晰,这不是完全必要的):

    value_3 = [(num_4 - num_3) / (num_2 - num_1) for num_1, num_2, num_3, num_4 in zip(list_1, list_2, list_3, list_4)]
    

    请注意,如果您打算使用可迭代对象进行数学运算,最好使用 NumPy 模块,这样可以简化操作(假设每个列表都已转换为数组):

    value_3 = (list_4 - list_3) / (list_2 - list_1)
    

    【讨论】:

      【解决方案2】:

      您可以使用 zip 将四个列表组合起来,并在列表推导中执行操作:

      def create_list_3_4():
          list_3 = []
          list_4 = []
          a = 4
          b = 5
          list_3.append(a) 
          list_3.append(b)
      
          c = 8
          d = 9
          list_4.append(c)
          list_4.append(d)
      
          return list_3, list_4
      
      list_1 = [10.5, 8.5]
      list_2 = [12.6, 11.5]
      list_3,list_4 = create_list_3_4()
      
      new_list = [(x4-x3)/(x2-x1) for x1,x2,x3,x4 in zip(list_1,list_2,list_3,list_4)]
      
      print(new_list)
      [1.904761904761905, 1.3333333333333333]
      

      要在整个列表之间执行操作,您可以/应该使用 numpy:

      import numpy as np
      
      list_1 = np.array([10.5, 8.5])
      list_2 = np.array([12.6, 11.5])
      list_3,list_4 = map(np.array,create_list_3_4())
      
      new_list = (list_4 - list_3) / (list_2 - list_1)
      
      print(new_list)
      [1.9047619  1.33333333]
      

      请注意,您应该在函数内部初始化 list_3 和 list_4,否则您将无法多次使用它,因为它会在每次调用时添加内容(使列表越来越大并且与list_1 和 list_2)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-30
        • 1970-01-01
        • 1970-01-01
        • 2013-02-09
        • 2022-11-24
        • 1970-01-01
        • 2011-01-20
        相关资源
        最近更新 更多