Python 在列表上调用函数

Python 在列表上调用函数,python,python-3.4,Python,Python 3.4,我有一个波长的光谱作为列表,还有一些我在公式中使用的其他列表(使用tmm.tmm_core)。如果我只是对所有波长做基本相同的事情,有什么比迭代波长更有效的方法吗? 范例 实际上可能有5000-10000行。当我按下go时,它似乎有点滞后,我认为这是因为迭代。对优化非常陌生,所以我没有使用任何基准测试工具或任何东西 您可以将所有列表放入自定义列表中,如C\u list,并使用map创建新列表all\u len包含所有列表的长度,然后使用列表理解创建列表final: all_len=map(len

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


实际上可能有5000-10000行。当我按下go时,它似乎有点滞后,我认为这是因为迭代。对优化非常陌生,所以我没有使用任何基准测试工具或任何东西

您可以将所有列表放入自定义列表中,如
C\u list
,并使用
map
创建新列表
all\u 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]
此外,如果
a
b
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]

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

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

迭代一个
范围
的成本并不高。也许列表理解比不断地添加到列表中要快,但它速度慢的大部分原因可能是因为
go
正在做什么。试试你的代码,看看到底发生了什么。你的问题得到回答了吗?
>>> def go(a,b,c):
...     return a+b+c
... 
>>> map(go, list1,list2, range(9,13))
[15, 18, 21, 24]