2017-03-16 12 views
0

このコードを実行するとが表示されます。何が問題なのですか?なぜTypeError: 'int'オブジェクトが反復可能でないのですか?

# Write a function called nested_sum that 
# takes a nested list of integers and add up 
# the elements from all of the nested lists. 

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) 
+0

あなたは 'sum(1)'をやっているからです。 – melpomene

+0

私はsum(1)が結果として1を与えるべきだと思っていましたが、何が間違っていますか?ありがとう – user3089520

+0

'return sum([listenerのxのisinstance(x、list)else x)の場合は([(nested_sum(x))] –

答えて

0

パラメータとしてイテレータを取る機能和。あなたのコードの8行目では、intを使ってsumを使用しています。 list1配列には、数値と配列が含まれています。 sum関数の情報を見ることができますhere

-1

sum()はargsとしてリストを取ります。あなたはとにかくSUM関数を自分で作るために持っているので、あなたはまた、自分自身の関数、再帰を作ることができ

item = sum(item) if isinstance(item, list) else item 
-1

あなたがに問題のある行を変更することができます。まったく同じことをする関数を書いたときに別の関数を使うのはなぜですか?

def nested_sum(lista): 
total = 0 
for item in lista: 
    if isinstance(item, list) or isinstance(item, tuple): 
     item = nested_sum(item) 
    total = total + item 
return total 
+0

なぜこれがダウンリストされたのか分かりません。私はコードを実行し、それは非常に正常に動作します。なぜこのスレッド内の他のすべての回答も下降していませんでした。彼らはすべて妥当と思われる。 – RMSD

-1

あなたはこれを合計することはできません。

l = [1,2,3,[4,5]] 
sum(1) 

ソリューション:

def nested_sum(ls): 
    total = 0 
    for e in ls: 
     if not isinstance(e, int): 
      items = sum(e) 
      total += items 
     else: 
      items = e 
      total += items 
    return total 
0

問題文

のネストされたリストを受け取り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のオブジェクトでなければなりません。反復可能オブジェクトのいくつかの例は、lists、dicts、およびsetsです。それが何らかのコレクションであれば、iterableであることはおそらく安全な前提です。 sum関数の第2引数はオプションです。追加する最初の番号を表す数字です。 2番目の引数を省略すると、0に追加されます.2番目の引数は関数には関係しないので、この場合は無視することができます。念頭に置いて

、あなたは今、最初の引数がエラーをスローするPythonインタプリタの原因としてintsum関数を呼び出す理由を見ることができるはずです。しかし、その行がいくつかに少し混乱することができ、私は」

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機能の使用方法を理解していただければ幸いです。

関連する問題