调用列表上的函数

2024-04-20 04:45:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个波长的光谱作为一个列表,还有一些我在公式中使用的其他列表(使用tmm.tmm\u核心). 如果我只是对所有波长做同样的事情,有什么比迭代波长更有效的方法吗? 示例

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键时,它似乎有点滞后,我想这是因为迭代。非常新的优化,所以我没有使用任何基准工具或任何东西。你知道吗


Tags: 方法answergo核心列表光谱事情final
3条回答

您可以将所有列表放在一个自定义列表中,如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]

另外,如果abc的长度相等,则可以使用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]

我想您正在寻找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]

如果必须对列表中的每一项执行操作,则必须遍历列表中的每一项。但是,您可以通过使用列表理解来提高速度:List Comprehensions

相关问题 更多 >