ここでは私のコードです:反復処理
map(lambda i: 3*i, map(lambda x: x, [[1, 2],[3, 4]]))
それは出力:[[1, 2, 1, 2, 1, 2], [3, 4, 3, 4, 3, 4]]
どのように私は3, 6, 9, 12
を印刷し、それを修正するのですか?
私はappendを使いたくありません。ちょうど地図とラムダ。
ここでは私のコードです:反復処理
map(lambda i: 3*i, map(lambda x: x, [[1, 2],[3, 4]]))
それは出力:[[1, 2, 1, 2, 1, 2], [3, 4, 3, 4, 3, 4]]
どのように私は3, 6, 9, 12
を印刷し、それを修正するのですか?
私はappendを使いたくありません。ちょうど地図とラムダ。
この問題は、内部のmap
が一連の番号ではなく一連のリストを返すという事実から発生します。これは、map
が小さいリストを含むリストを反復しているからです。したがって、itertools.chain.from_iterable
を使用してそのリストをフラット化すると、一連の数字が得られます。その後、予想通りPythonで*
オペレータが多型であるため、あなたのコードは動作しませんでした
In [67]: L = [[1, 2],[3, 4]]
In [68]: for i in map(lambda i: 3*i, itertools.chain.from_iterable(L)): print(i)
3
6
9
12
それらを三つ組する外側map
を使用することができます。つまり、x
とn
が数字の場合、x*n
は両方の数値の積を返しますが、一方のオペランド(たとえばn
)が整数でもう一方がシーケンス(.e。x
はリスト、タプルまたは文字列)式x*n
は、x
を連結した結果のシーケンスをn
回返します。例:
>>> your_list = [[1, 2], [3, 4]]
>>> flat_list = [item for sublist in your_list for item in sublist]
>>> flat_list
[1, 2, 3, 4]
>>> triples = map(lambda x: 3*x, flat_list)
>>> triples
[3, 6, 9, 12]
実際にあなたがmap()
とlambda
を使用する必要はありません:あなたはmap()
を適用する前に、あなたのリストを平らにする必要が期待される結果を得るために
>>> .1 * 2.5
0.25
>>> [1, 2] * 3
[1, 2, 1, 2, 1, 2]
>>> "beep" * 2
beepbeep
。私は1ライナーのリストの理解を使用すると、もっとpythonicだろうと思う:
>>> triples = [3*item for sublist in your_list for item in sublist]
>>> triples
[3, 6, 9, 12]