如何将一个函数映射到列表中每个子列表的每个项目

3
有没有一种方法可以不使用常规的for循环来遍历主列表?
>>> map(lambda x: x*2, [[1,2,3],[4,5,6]])
[[1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6]]
# want [[2,4,6],[8,10,12]]
3个回答

11

您有嵌套列表,x代表其中一个列表。要处理它,您需要实际将乘法函数映射到x的各个元素上,就像这样:

>>> map(lambda x: map(lambda y: y * 2, x), [[1, 2, 3], [4, 5, 6]])
[[2, 4, 6], [8, 10, 12]]

但我更倾向于使用列表推导式来代替这个方法,

>>> [[y * 2 for y in x] for x in [[1, 2, 3], [4, 5, 6]]]
[[2, 4, 6], [8, 10, 12]]

3

另一种解决方案是采用numpy向量化操作:

import numpy as np

ll = [[1,2,3],[4,5,6]]

(2*np.array(ll)).tolist()
#Out[6]: [[2, 4, 6], [8, 10, 12]]

0

这可能有点过度,对于这个特定的例子来说并不太实用,但另一种风格选项是使用 functools.partial 来清楚地表明正在发生什么,并结合 map 和列表推导式。

from functools import partial
from operator import mul

l = [[1, 2, 3], [4, 5, 6]]

double = partial(mul, 2)
dub_l = [map(double, sub) for sub in l]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接