2017-01-16 4 views
2

私はPythonにはとても新しく、 'rowIndex'パラメータとしてkが与えられているパスカル三角形のk番目の行を返す以下のコードを書いています。この問題は、連結[0]+rowが正常に機能しているのに、row+[0]が機能していないマップ関数で発生し、以下に示すようにエラーがスローされています。この問題は、マップの代わりにzipを使用して実装されたコードでは発生しませんでした(以下のコードでコメントアウトされています)。Python:奇妙な振る舞いをする2つのリストの連結

ありがとうございます!

エラー:

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が発生します:あなたは、Python 3.xを使用している場合は

>>> [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]) 

は、mapイテレータを返します。あなたの詳細な回答のため

>>> 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

感謝を:あなたは、リストオブジェクトを取得するにはlist機能を使用して一覧表示するには、それを変換する必要があります。それは大いに役立ちます。 –