关于python:如何将函数应用于嵌套列表的每个元素?

How can I apply a function to each element of a nested list?

本问题已经有最佳答案,请猛点这里访问。

从列表中,M:

1
2
3
M = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

我想创建一个新的列表,l,所有项目都翻倍了。

到目前为止,我尝试了迭代、理解和lambda表达式的各种组合,但都没有用。

最简单/最快的方法是什么?


嵌套列表理解将执行以下操作:

1
2
double_M = [[2 * x for x in inner] for inner in M ]
>> [[2, 4, 6], [8, 10, 12], [14, 16, 18]]


如果您使用的是numpy,则可以将整个矩阵加倍:

1
2
3
4
5
6
7
8
9
10
11
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矩阵的一个小基准:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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在速度方面是个不错的选择