Python 如何将函数应用于嵌套列表的每个元素?
从列表中,M:Python 如何将函数应用于嵌套列表的每个元素?,python,python-3.x,Python,Python 3.x,从列表中,M: M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 我想创建一个新的列表,L,所有项目加倍 到目前为止,我已经尝试了迭代、理解和lambda表达式的各种组合,但都没有效果 最简单/最快的方法是什么?嵌套列表理解可以: double_M = [[2 * x for x in inner] for inner in M ] >> [[2, 4, 6], [8, 10, 12], [14, 16, 18]] 如果您使用的是nu
M = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
我想创建一个新的列表,L,所有项目加倍
到目前为止,我已经尝试了迭代、理解和lambda表达式的各种组合,但都没有效果
最简单/最快的方法是什么?嵌套列表理解可以:
double_M = [[2 * x for x in inner] for inner in M ]
>> [[2, 4, 6], [8, 10, 12], [14, 16, 18]]
如果您使用的是
numpy
,则可以将整个矩阵加倍:
In [1]: import numpy as np
In [2]: M = [[1, 2, 3],
...: [4, 5, 6],
...: [7, 8, 9]]
In [3]: np.array(M) * 2
Out[3]:
array([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
下面是固定3x3矩阵的一个小基准:
import numpy as np
import timeit
M = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
def f1(M):
return [[x * 2 for x in r] for r in M]
def f2(M):
return np.array(M) * 2
K=1000000
print(timeit.timeit('f1(M)', setup='from __main__ import f1, M', number=K))
print(timeit.timeit('f2(M)', setup='from __main__ import f2, M', number=K))
# 1.886869086403203
# 3.470187123186767
# [Finished in 5.6s]
我想说f1在速度方面是一个不错的选择
[[x*2代表x in r]代表r in M]
?,然后对平面列表的每个元素执行您的操作。@KevinJ.Chase:到目前为止,答案都假设新列表L
将具有与M
相同的结构(未展开)。@StevenRumbalski:很好。。。我想我们都只是假设输出应该是什么样子。Janus---请将您的问题包含在您希望示例输入生成的输出列表中。另请参阅您有一个错误的括号。@StevenRumbalski谢谢,已将其修复。可能的原因是在f2中转换为np.array,而f1返回默认python列表。如果在f1中添加对话(np.array(***)
),结果将比在f2中更慢