Python学习入门基础教程(learning Python)--4.2.3 Python的for实现递归,(0629学习笔记)我研究出来了!...

呵呵,本节主要简单的讨论一下用for来实现递归操作。

先看一下本节设计的小程序要求,有这样一个list:

[1, 2, [3, 4], 5, 6, [7, 8, 9]]

用for循环打印结果是什么样的呢?

def p():
	for i in [1, 2, [3, 4], 5, 6, [7, 8, 9]]:
		print i
def main():
	p()
main()

运行结果为:

我们能有办法打印出下面的结果么?

也就是说遇到了子list列表也一项项输出。

要想实现上边的要求这里需要学习一个python内建(built-in)函数,isinstance(),先看看该函数的帮助好了

Help on built-in function isinstance in module __builtin__:

isinstance(...)
    isinstance(object, class-or-type-or-tuple) -> bool
    
    Return whether an object is an instance of a class or of a subclass thereof.
    With a type as second argument, return whether that is the object's type.
    The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for
    isinstance(x, A) or isinstance(x, B) or ... (etc.).
(END)

如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, 返回True。如果object不是一个给定类型的的对象, 则返回结果总是False。
有了isinstance函数的帮助,我们就可以实现上图程序的要求了。

def p():
        for i in [1, 2, [3, 4], 5, 6, [7, 8, 9]]:
                if isinstance(i, list):
                        for j in i:
                                print j
                else:
                        print i
def main():
        p()

main()
程序第2行的for循环会分6次将数据依次取出赋值给i变量,当i = [3, 4]的时候,第3行代码会判断此时的i是否是list类型?结果为真,则执行第4~5这嵌套的for循环,第4~5行的for循环会2 次从[3, 4]里取出数据赋值给j变量,这样[3, 4]被分别打印出来了,而[3, 4]前边的1和2不满足第3行的if条件判断则去执行print i打印语句了。第2行的list里后边的5和6也是不满足第3行的判断条件而被直接打印输出,当第2行的for循环遇到[7, 8, 9]时也是先赋值给i,第3行判断出了此时的i是list类型数据,从而又执行了第4~5行的for循环体,因此7,8,9三个数也能一一打印出来。程序运行结果如下图所示。



现留一个问题思考一下:如果list里有n层的list嵌套,该如何实现呢?用递归!我研究出来了!呵呵!

[1, 2, 4, [5, [6,[7,8],[9,10,[[11],1],2,4]]]]

n未知,该如何是好?




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值