通过遍历方法调用中的列表来创建值列表

时间:2020-01-27 00:20:29

标签: python list methods

我想创建一个值列表,该值列表是将两个变量列表(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)))

4 个答案:

答案 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)]