从列表中,M:
M = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
我想创建一个新列表L,所有项目都加倍。
到目前为止,我已尝试过迭代,理解和lambda表达式的各种组合,但都无济于事。
最简单/最快的方法是什么?
答案 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在速度方面是个不错的选择