如何使用多个列表执行计算?



所以我有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)

这可以通过列表推导来实现,正如您已经开始的那样,以及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)

您可以使用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不兼容)

相关内容

  • 没有找到相关文章

最新更新