2017-01-16 27 views
2

我對Python很新,我寫了下面的代碼,它返回一個Pascal三角形的第k行,其中k作爲'rowIndex'參數提供。在映射函數中發生問題,其中級聯[0]+row工作正常,但row+[0]不起作用,並且正在拋出錯誤,如下所示。這個問題在使用zip而不是map實現的代碼中沒有發生(它在下面的代碼中被註釋掉了)任何人都可以指出問題是什麼?Python:兩個列表的連接行爲怪異

在此先感謝!

錯誤:

row = [map(lambda a, b: a + b, [0]+row, row+[0])]

TypeError: unsupported operand type(s) for +: 'int' and 'list'

代碼:

class Solution(object): 
    def getRow(self, rowIndex): 
     """ 
     :type rowIndex: int 
     :rtype: List[int] 
     """ 
     row = [1] 
     for _ in range(rowIndex): 
      row = [map(lambda a, b: a + b, [0]+row, row+[0])] 
      # row = [x + y for x, y in zip([0]+row, row+[0])] 
     return row 
obj = Solution() 
print obj.getRow(3) 

回答

4

map返回一個列表,你不應該[...]包裹。

>>> map(lambda a, b: a + b, [0,1,2], [1,2,0]) # Python 2.x 
[1, 3, 2] 

通過與[..]包裝,您將得到一個列表的列表;這一次迭代後會引起TypeError

>>> [map(lambda a, b: a + b, [0,1,2], [1,2,0])] 
[[1, 3, 2]] 

row = map(lambda a, b: a + b, [0]+row, row+[0]) 

如果您正在使用Python 3.x中,map返回迭代;你需要將其轉換爲使用list函數來獲取列表對象,列出:

>>> map(lambda a, b: a + b, [0,1,2], [1,2,0]) # Python 3.x 
<map object at 0x7f5acef0a0b8> 
>>> list(map(lambda a, b: a + b, [0,1,2], [1,2,0])) 
[1, 3, 2] 

row = list(map(lambda a, b: a + b, [0]+row, row+[0])) 
+0

感謝您詳細的解答。這有很大幫助。 –