知识点
迭代
迭代
什么是迭代呢?和递归又有什么区别呢?
根据维基百科和网上的资料:
迭代:迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,
而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
如求1+2+3+4+5的和:
递归呢?指在函数的定义中使用函数自身的方法。也就是函数不停的调用自己直到满足一定条件。
而用递归是怎样求1--5的和呢?
斐波那契数列的递归和迭代实现:
1 deffib(n):2 if n>0:3 if (n==1 or n==2):4 return 1
5 else:6 return fib(n-1)+fib(n-2)7 else:8 return -1
9 deffib_2(n):10 if n<=0:11 return -1
12 else:13 a=1
14 b=1
15 s=1
16 for i in range(n-2):17 s=a+b18 a=b19 b=s20 returns21 print fib(int(raw_input('Please input a number you want to calculate the fib number:')))22 print fib_2(int(raw_input('Please input a number you want to calculate the fib number:')))
那Python中哪些是可迭代的呢?
从左往右扫描对象的方式都是可迭代的。
如何判断一个对象是不是可迭代的呢?
使用Python的内置函数hasattr ,hasattr(object,name)当object具有name属性时返回真。迭代属性就是__iter__.
2. 使用collections模块的Iterable类型来判断
对于一般的可迭代类型用for in就可以对它们进行迭代操作
但是对于有键值对的字典呢?对于值value则需要itervalues()函数来对值进行操作
1 capitals={'China':'beijing','America':'Washington','Russia':'Moscow'}2 print 'countries:'
3 for country incapitals:4 printcountry5 print 'capitals:'
6 for capital incapitals.itervalues():7 print capital
可以看出字典进行迭代操作时,得出的值不一定按顺序。
我们以前写Java和c++的程序员都习惯下标循环,那在Python中怎样实现呢?通过enumerate()函数即可实现。
根据Python官方文档,enumerate(sequence, start=0)返回一个有默认下标从0开始的object。
1 seasons = ['Spring', 'Summer', 'Fall', 'Winter']2 printlist(enumerate(seasons))3 print list(enumerate(seasons, start=1))