2017-03-16 123 views
1

我試圖做一個scalar_multiplication lambda函數,但我只能讓我的第一個斷言工作。我認爲我需要考慮多個抽象層次,但我被卡住了。以下是我迄今爲止標量乘法?

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有兩級,因而需要迭代兩次。根據您當前的代碼

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] 

應該正常工作。