运行此代码时,我得到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)
答案 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,dict
和set
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)