为什么我得到" TypeError:' int'对象不可迭代"

时间:2017-03-16 22:17:58

标签: python iterable

运行此代码时,我得到TypeError: 'int' object is not iterable,这有什么问题?

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

5 个答案:

答案 0 :(得分:0)

函数 sum 将迭代器作为参数。在代码的第8行中,您使用的是带有int的sum。您的 list1 数组包含数字和数组。 您可以找到有关sum函数here

的信息

答案 1 :(得分: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)

<强>答案

您已经很好地尝试解决了这个问题,但是您得到的是TypeError,因为您正在使用sum函数调用sum函数不适合用来打电话。

我建议您阅读涵盖sum函数的Python documentation。但是,我也会在这里给你一点解释。

sum函数最多需要两个参数。第一个参数必须是iterable的对象。可迭代对象的一些示例是list s,dictset s。如果它是某种类型的集合,那么它可能是一个可以迭代的安全假设。 sum函数的第二个参数是可选的。它是一个代表您将开始添加的第一个数字的数字。如果省略第二个参数,那么您将开始添加到0.第二个参数与您的函数无关,因此在这种情况下您可以忽略它。

考虑到这一点,您现在应该能够看到为什么使用sum作为第一个参数调用int函数会导致Python解释器抛出错误。

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的答案修复错误,即用以下内容替换问题行:

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

然而,这条线可能会让一些人感到困惑,所以我会冒昧地让它变得更加明显。

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)

此外,虽然这段代码可能适用于您提供的示例列表。考虑一下如果使用更深层嵌套的列表调用函数会发生什么。

EG。 list1 = [1, 2, 3, [4, 5, [6, 7]]]

我希望这不仅可以帮助您解决问题,还可以了解如何使用sum函数。

答案 2 :(得分:-1)

sum()将列表作为其args。

您可以将问题行更改为:

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

答案 3 :(得分:-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

答案 4 :(得分:-1)

你无法总结:

RailsAppli::Application.routes.draw do
    get '/', :to => "landing#pos", :constraints => { :host => "pos.com.ar" }

    get '/', :to => "landing#desa", :constraints => { :host => "desa.com.ar" }

    get '/', :to => "landing#plan", :constraints => { :host => "dise.com.ar" }

解决方案:

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