有沒有一種方法可以在不使用常規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]]
有沒有一種方法可以在不使用常規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]]
您有嵌套列表,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]]
替代的解決方案是去塊狀矢量化操作:
import numpy as np
ll = [[1,2,3],[4,5,6]]
(2*np.array(ll)).tolist()
#Out[6]: [[2, 4, 6], [8, 10, 12]]
這是有點矯枉過正,不太實際這個特殊的例子,但另一種風格選項可以使用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]