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

时间:2016-05-31 05:39:53

标签: python list python-2.7

有没有办法在不使用常规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 个答案:

答案 0 :(得分: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]]

答案 1 :(得分: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]]

答案 2 :(得分: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]