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]] |
如果您使用的是
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在速度方面是个不错的选择