我想创建一个值列表,该值列表是将两个变量列表(init_list和fin_list)馈入保存在方法(yoy_eq)中的方程式的结果。
我尝试使用通过迭代init_list和fin_list的列表理解来追加调用yoy_eq的结果,但它返回:
TypeError:-:“列表”和“列表”的不受支持的操作数类型
如何从列表而不是列表本身输入yoy_eq int?
我已经尝试过了:
init_list = [y_2000,y_2005,y_2010]
fin_list = [y_2005,y_2010,y_2015]
def yoy_eq(init,fin):
return (init-fin) * 100 /init
y = []
y.append(yoy_eq([i for i in init_list],[i for i in fin_list]))
这:
def yoy_eq(init,fin):
return (init-fin) * 100 /init
def iterator(a):
for i in a:
return a
y.append((yoy_eq(iterator(init_list),iterator(fin_list)))
答案 0 :(得分:1)
您提供的代码将与进行元素式算术的numpy数组一起使用。
但是,对于纯Python,您需要手动进行迭代:
def yoy_eq(init,fin):
'Return a new list combining *init* and *fin*'
return [(init_value - fin_value) * 100 / init_value
for init_value, fin_value in zip(init, fin)]
使用 numpy 可以免费进行迭代:
>>> import numpy as np
>>> init = np.array([2000, 2010, 2020])
>>> fin = np.array([2004, 2050, 2075])
>>> (init-fin) * 100 / init
array([-0.2 , -1.99004975, -2.72277228])
答案 1 :(得分:0)
我希望这就是您想要的:
def yoy_eq(init, fin):
return [
(it1 - it2) * 100 / it1
for it1, it2 in zip(init, fin)
]
其中it1
-是初始化列表的迭代器,而it2
-是fin列表的迭代器
答案 2 :(得分:0)
使用列表理解,您可以尝试以下方法:
init_list = [y_2000,y_2005,y_2010]
fin_list = [y_2005,y_2010,y_2015]
def yoy_eq(init,fin):
return (init-fin) * 100 /init
y = [yoy_eq(init_list[i], fin_list[i]) for i in range(len(init_list))]
或者可能更好:
y = [yoy_eq(init, fin) for init,fin in zip(init_list, fin_list)]
答案 3 :(得分:0)
map
可以遍历两个列表。
init_list = [y_2000,y_2005,y_2010]
fin_list = [y_2005,y_2010,y_2015]
def yoy_eq(init,fin):
return (init-fin) * 100 /init
y = list(map(yoy_eq, init_list, fin_list))
或者您可以将两个列表压缩在一起,并使用列表理解来应用该功能。
y = [yoy_eq(x, y) for x, y in zip(init_list, fin_list)]