在列表上调用函数

时间:2015-07-23 18:39:38

标签: python python-3.4

我有一个波长光谱作为列表和我在公式中使用的一些其他列表(使用tmm.tmm_core)。如果我基本上对所有波长做同样的事情,是否有比迭代波长更有效的东西? 实施例

def go(n, thk, theta):
     #do stuff
     return(something)

wv = [1, 2, 3, 4]
a_vec = [3, 7, 3, 9]
b_vec = [6, 5, 9, 3]
c_vec = [0, 1, 8, 9]
theta = 0
th = [10, 1, 10]
final = []

for i in range(len(wv)):
    n = [a[i], b[i], c[i]]
    answer = go(n, th, theta)
    final.append(answer)

实际上可能有5000-10000行。当我按下go并因为迭代而假设时,它似乎有点滞后。对优化很新,所以我没有使用任何基准测试工具或任何东西。

3 个答案:

答案 0 :(得分:1)

您可以将所有列表放在C_list等自定义列表中,并使用map创建新列表all_len包含所有列表的长度,然后使用列表推导创建列表final

all_len=map(len,C_list)
final =[[go([a[i], b[i], c[i]], th, theta) for i in range(li)] for li in all_len]

此外,如果ab以及c的长度相等,您可以使用zip函数压缩然后拒绝多个索引:

all_len=map(len,C_list)
z=zip(a,b,c)
final =[[go(z[i], th, theta) for i in range(li)] for li in all_len]

答案 1 :(得分:1)

我认为您正在寻找Python中的map函数!

>>> list1 = [1,2,3,4]
>>> list2 = [5,6,7,8]
>>> map(lambda x,y: x+y, list1, list2)
[6, 8, 10, 12]

它接受一个函数(在上面的例子中,一个匿名的lambda函数),一个或多个列表并返回另一个列表。在函数内的每次迭代中,迭代两个列表并将结果添加到新列表中。你不需要限制自己对lambda声明的表达能力;您还可以使用全局定义的函数,如下例所示:

>>> def go(a,b,c):
...     return a+b+c
... 
>>> map(go, list1,list2, range(9,13))
[15, 18, 21, 24]

答案 2 :(得分:0)

如果您必须对列表中的每个项目执行操作,那么您将不得不浏览列表中的每个项目。但是,您可以通过使用列表推导来获得速度:List Comprehensions