2013-03-24 · 知道合伙人软件行家
关注
展开全部
当flatten被调用时,有两种可能性(处理递归时大部分时都是有两种情况):基本情况和需要递归的情况。在基本的情况中,函数被告知展开一个元素(比如一个数字),这种情况下,for循环会引发一个TypeError异常(因为试图对一个数字进行迭代),生成器会产生一个元素。
TypeError: 'int' object is not iterable
如果展开的是一个列表(或者其他的可迭代对象),那么就要进行特殊处理。程序必须遍历所有的子列表(一些可能不是列表),并对它们调用flatten。然后使用另一个for循环来产生被展开的子列表的所有元素。这可能看起来有点不可思议,但却能工作。
TypeError: 'int' object is not iterable
如果展开的是一个列表(或者其他的可迭代对象),那么就要进行特殊处理。程序必须遍历所有的子列表(一些可能不是列表),并对它们调用flatten。然后使用另一个for循环来产生被展开的子列表的所有元素。这可能看起来有点不可思议,但却能工作。
追问
又是抄的吗??我想知道当产生TypeError时是怎么工作的,主要解释result.append(nested)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for sublist in nested # 这种语句无法处理非可遍历对象,譬如单个int 2
上面的程序可以改写成:
def flattern(nested):
result = []
if isinstance(nested, list):
for sublist in nested:
result.extend(flattern(sublist))
else:
result.append(nested)
return result
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
异常的话直接加入result中,,整数 for sublist in 3 执行到这的时候 就直接加到result中,,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有更好的方式来处理嵌套列表:
def flatten(x):
for elem in x:
if not isinstanceof(elem, basestring) and hasattr(elem, '__iter__'):
for y in flatten(elem):
yield y
def flatten(x):
for elem in x:
if not isinstanceof(elem, basestring) and hasattr(elem, '__iter__'):
for y in flatten(elem):
yield y
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询