Python的高级特性之切片、迭代、列表生成式、生成器
切片
1 l = range(100) 2 #取[0,5)元素 3 print(l[:5]) #[0, 1, 2, 3, 4] 4 #在[0,99]中每隔10个元素取一个 5 print( l[::10]) #[0, 10, 20, 30, 40, 50, 60, 70, 80, 90] 6 #取最后五个元素 7 print( l[-5 : ]) #[95, 96, 97, 98, 99] 8 9 str = "www.genekang.com" 10 #也可以用来截取字符串 11 print( str[4:8]) #gene
for
循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)1 myList = [‘a‘, ‘b‘, 123, ‘abc‘] 2 3 #对一个list进行迭代 4 5 for k in myList: 6 7 print k 8 9 #Python内置的enumerate函数可以把一个list变成索引-元素对 10 11 # 0 a 12 13 # 1 b 14 15 # 2 123 16 17 # 3 abc 18 19 for i,k in enumerate(myList): 20 21 print i,k
除了list之外,dict迭代的是key。如果要迭代value,可以用for value in d.itervalues()
,如果要同时迭代key和value,可以用for k, v in d.iteritems()
。
如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:
>>> from collections import Iterable
>>> isinstance(‘abc‘, Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False
列表生成式1 #计算1-10中偶数的平方 2 3 ll =range(1,11) 4 5 print [x*x for x in ll if x % 2 ==0 ] 6 7 8 9 #还可以双层循环 10 11 print [i + j for i in "ab" for j in "cd"] #[‘ac‘, ‘ad‘, ‘bc‘, ‘bd‘] 12 13 14 15 #列表生成式也可以使用两个变量来生成list 16 17 d = {‘x‘: ‘A‘, ‘y‘: ‘B‘, ‘z‘: ‘C‘ } 18 19 print [k + ‘:‘ + v for k,v in d.iteritems()] #[‘y:B‘, ‘x:A‘, ‘z:C‘]
[]
改成()
,就创建了一个generator1 用函数实现一个斐波那契数列 2 3 #1 1 2 3 5 8 4 5 def fib(max): 6 7 n,a,b = 0,0,1 8 9 while(n<max): 10 11 print b 12 13 a , b = b , a+b 14 15 n = n+1
仔细观察,可以看出,fib
函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator。
也就是说,上面的函数和generator仅一步之遥。要把fib
函数变成generator,只需要把print b
改为yield b
就可以了:
1 def fib(max): 2 3 n,a,b = 0,0,1 4 5 while(n<max): 6 7 yield b 8 9 a , b = b , a+b 10 11 n = n+1 12 13 for x in fib(6): 14 15 print x
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。