版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yysyangyangyangshan/article/details/84679870
前面我们get到了一个技能,生成器。
那么如果我们想依次输出一个数组,但是数组中又嵌套数组,又嵌套数组...嵌套未知层,那么如何实现?如果使用for可能就有点不方便了,这时我们需要递归。
我们可以这样做,
def myFlatten(seq):
try:
for list in seq:
for item in myFlatten(list):
yield item
except Exception:
yield seq
测试我们的代码
seque=[[1,[2,[3]]],[4,[5,[6,[7,[8]]]]],[9,10],[11]]
for item in myFlatten(seque):
print(item)
输出
1
2
3
4
5
6
7
8
9
10
11
print(list(myFlatten(seque)))
输出
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
对于上述实现方式,我们发现并不完善,如果数组是字符串那就可能引发typeError异常。于是我们增加一个检查的逻辑。
def myFlattenAdvance(seq):
try:
try: seq+''
except TypeError:
pass
else:raise TypeError
for list in seq:
for item in myFlattenAdvance(list):
yield item
except Exception:
yield seq
发现类型错误,则在异常中处理,本段代码中,我们不做异常处理。
测试调用如下,
strSeq=['魔礼青',['魔礼海',['魔礼红','魔礼寿']]]
for item in myFlattenAdvance(strSeq):
print(item)
输出
魔礼青
魔礼海
魔礼红
魔礼寿
print(list(myFlattenAdvance(strSeq)))
输出
['魔礼青', '魔礼海', '魔礼红', '魔礼寿']
这样我们可以递归字符串类型的数组了。
工程文件下载:https://download.csdn.net/download/yysyangyangyangshan/10821963