Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将函数应用于嵌套列表的每个元素?_Python_Python 3.x - Fatal编程技术网

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

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:

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中更慢