問題文
のネストされたリストを受け取りnested_sumという関数を書きますすべてのネストされたリストから要素を追加する。
OP試行
def nested_sum(lista):
total = 0
for item in lista:
item = sum(item)
total = total + item
return total
list1 = [ 1 , 2 ,3 , [7, 3] ]
nested_sum(list1)
回答
あなたが問題を解決するのが得意試みを行ったが、あなたは、引数でsum
関数を呼び出しているので、あなたがTypeError
ことになっていますsum
関数が呼び出されるように設計されていないことを示します。
sum
機能をカバーするPython documentationを読むことをお勧めします。しかし、ここでも少し説明します。
sum
関数は最大で2つの引数をとります。最初の引数は、iterable
のオブジェクトでなければなりません。反復可能オブジェクトのいくつかの例は、list
s、dict
s、およびset
sです。それが何らかのコレクションであれば、iterableであることはおそらく安全な前提です。 sum関数の第2引数はオプションです。追加する最初の番号を表す数字です。 2番目の引数を省略すると、0に追加されます.2番目の引数は関数には関係しないので、この場合は無視することができます。念頭に置いて
、あなたは今、最初の引数がエラーをスローするPythonインタプリタの原因としてint
でsum
関数を呼び出す理由を見ることができるはずです。しかし、その行がいくつかに少し混乱することができ、私は」
item = sum(item) if isinstance(item, list) else item
:
def nested_sum(lista):
total = 0
for item in lista:
item = sum(item) # The error is here
total = total + item
return total
list1 = [ 1 , 2 ,3 , [7, 3] ]
nested_sum(list1)
あなたが問題の行を置き換えることですJacobIRRの答え、@使用してエラーを修正することができますそれをより明白にする自由を取るでしょう。
def nested_sum(lista):
total = 0
for item in lista:
if isinstance(item, list): # if the item is a list
item = sum(item) # sum the list
total += item # total = total + item
return total
list1 = [ 1 , 2 ,3 , [7, 3] ]
nested_sum(list1)
また、このコードは、提供したサンプルリストで機能します。あなたがさらにネストされたリストをあなたの関数に呼び出した場合に起こることを考えてください。
例: list1 = [1, 2, 3, [4, 5, [6, 7]]]
これはあなたの問題の解決に役立つだけでなく、sum
機能の使用方法を理解していただければ幸いです。
あなたは 'sum(1)'をやっているからです。 – melpomene
私はsum(1)が結果として1を与えるべきだと思っていましたが、何が間違っていますか?ありがとう – user3089520
'return sum([listenerのxのisinstance(x、list)else x)の場合は([(nested_sum(x))] –