通常の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
は一つだけのリストのを表しています。ことを処理するには、この
>>> map(lambda x: map(lambda y: y * 2, x), [[1, 2, 3], [4, 5, 6]])
[[2, 4, 6], [8, 10, 12]]
のように、実際にx
の個々の要素に上の乗算機能をマップする必要があります。しかし、私はこれ以上のリスト内包を好むだろう、
>>> [[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]