Python 嵌套列表的求和
可能重复:Python 嵌套列表的求和,python,string,recursion,nested-lists,Python,String,Recursion,Nested Lists,可能重复: 在尝试展平列表时,如果我传递字符串,就会遇到无限递归。据我所知,这是因为字符串的第一个元素也是字符串,而字符串又可以被迭代。我通过查看我的元素是否像字符串一样嘎嘎作响来解决这个问题,因此出现了第二个异常。这看起来相当混乱。此外,真正的问题来自字符串的递归没有“基本情况”。是否有其他具有此属性的对象 有人有更干净的解决方案吗 def nestedsum(lst, init_sum): for itm in lst: try: init_
在尝试展平列表时,如果我传递字符串,就会遇到无限递归。据我所知,这是因为字符串的第一个元素也是字符串,而字符串又可以被迭代。我通过查看我的元素是否像字符串一样嘎嘎作响来解决这个问题,因此出现了第二个异常。这看起来相当混乱。此外,真正的问题来自字符串的递归没有“基本情况”。是否有其他具有此属性的对象 有人有更干净的解决方案吗
def nestedsum(lst, init_sum):
for itm in lst:
try:
init_sum +=itm
except TypeError as e:
#check if we have some string iterator
# as this can cause infinite recurrsion
try:
itm + ''
except TypeError as e2:
init_sum +=nestedsum(itm)
else:
raise TypeError("Strings cannot be summed over")
return init_sum
提前谢谢。很抱歉,如果某个地方有类似的帖子,但我没有幸运地找到它。我相信这会满足您的需要,并且也适用于字符串
def nestedsum(lst, init_sum):
for itm in lst:
if isinstance(itm, (float, int)):
init_sum += itm
elif isinstance(itm, (tuple, list)):
init_sum += nestedsum(itm, init_sum)
else:
continue
return init_sum
我相信这将满足您的需要,并且也适用于字符串
def nestedsum(lst, init_sum):
for itm in lst:
if isinstance(itm, (float, int)):
init_sum += itm
elif isinstance(itm, (tuple, list)):
init_sum += nestedsum(itm, init_sum)
else:
continue
return init_sum
可能是更好的方法,但您可以使用
isinstance()
检查该项是否为列表
可能是更好的方法,但您可以使用
isinstance()
检查该项是否为列表
为什么不检查它是列表还是元组呢?你能测试一个对象是否是任何类型的数字吗?我认为这将有助于不提出任何例外情况,并在事后抓住任何例外情况。@jamylak谢谢,这确实回答了我的问题。谢谢你能展示一个输入和期望(或期望)输出的示例吗?我想我的问题应该更强调关于除了字符串之外是否还有其他iterable对象具有这种无限行为的部分。如果是这样的话,那么我应该把函数限制在我想要的特定的可重用项上。如果没有,那么我只检查我没有字符串。为什么不检查它是列表还是元组?你能测试一个对象是否是任何类型的数字吗?我认为这将有助于不提出任何例外情况,并在事后抓住任何例外情况。@jamylak谢谢,这确实回答了我的问题。谢谢你能展示一个输入和期望(或期望)输出的示例吗?我想我的问题应该更强调关于除了字符串之外是否还有其他iterable对象具有这种无限行为的部分。如果是这样的话,那么我应该把函数限制在我想要的特定的可重用项上。如果没有,那么我只是检查我没有字符串。