2017-03-16 19 views
1

私はscalar_multiplicationラムダ関数を作ろうとしていますが、私は最初のアサートが働くことしかできません。私は説明する必要がある抽象化の複数のレベルがあると思うが、私は立ち往生している。ここで私はこれまでスカラー倍数?

scalar_mult = lambda c, M: [x * c for x in M] 

assert scalar_mult(1, [[1,2], [3,4]]) == [[1,2], [3,4]] 
assert scalar_mult(2, [[1,2], [3,4]]) == [[2,4], [6,8]] 

答えて

3

あなたのリストMは二つのレベルを持っている、ので、あなたが二回反復する必要が持っているものです。あなたが2で最初のリストの各要素をmultipling、およびPythonでリストをmultipling、整数は、単に複製でいるとして、あなたの現在のコードで

scalar_mult(2, [[1,2], [3,4]]) 

[[1,2,1,2], [3,4,3,4]] 

になりますそれ。新しいリストの最初の要素は、2番目のものに移行して、類似した「エラー」をして、あなたのコードがある

[1, 2]*2 # which equals to [1,2,1,2] 

を行い、保存します。

一方

scalar_mult = lambda c, M: [[x * c for x in X] for X in M] 

は正常に動作する必要があります。