所以我有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.5
和11.5 - 8.5
等等。对于函数内的列表,我想做同样的事情。所以8 - 4
和9 - 5
等等…
最后我想将12.6 - 10.5
和8 - 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_3
和list_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不兼容)