少说话多写代码之Python学习053——类的成员(生成器的使用:递归)

栏目: Python · 发布时间: 7年前

内容简介:前面我们get到了一个技能,生成器。那么如果我们想依次输出一个数组,但是数组中又嵌套数组,又嵌套数组...嵌套未知层,那么如何实现?如果使用for可能就有点不方便了,这时我们需要递归。我们可以这样做,

前面我们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)

输出

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

机器学习基础教程

机器学习基础教程

(英)Simon Rogers,、Mark Girolami / 郭茂祖、王春宇 刘扬 刘晓燕、刘扬、刘晓燕 / 机械工业出版社 / 2014-1 / 45.00

本书是一本机器学习入门教程,包含了数学和统计学的核心技术,用于帮助理解一些常用的机器学习算法。书中展示的算法涵盖了机器学习的各个重要领域:分类、聚类和投影。本书对一小部分算法进行了详细描述和推导,而不是简单地将大量算法罗列出来。 本书通过大量的MATLAB/Octave脚本将算法和概念由抽象的等式转化为解决实际问题的工具,利用它们读者可以重新绘制书中的插图,并研究如何改变模型说明和参数取值。......一起来看看 《机器学习基础教程》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试