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

时间:2016-08-22 12:05:20

标签: python python-3.x

从列表中,M:

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

我想创建一个新列表L,所有项目都加倍。

到目前为止,我已尝试过迭代,理解和lambda表达式的各种组合,但都无济于事。

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

3 个答案:

答案 0 :(得分:4)

嵌套列表理解将:

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

答案 1 :(得分:3)

如果您使用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]])

答案 2 :(得分:-1)

这是固定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在速度方面是个不错的选择