三、python高级特性(切片、迭代、列表生成器、生成器)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1.python高级特性

1.1切片

list列表 L=['Mli','add','sal','saoo','Lkkl']

L[0:3] #即为['Mli','add','sal'] 从索引0开始,到索引3结束,但不包括3

L[:3]等价于 L[0:3]

L[-2:] #即为 ['saoo','Lkkl'] 最后一个元素的索引为-1

L[-2:-1] #即为['Lkkl']

L=range(100) #则L[1:6:2]为 每个两个元素取一个数 所以输出为[2,4]

tuple也可以用切片操作,只是切片不可变,操作以后还是切片 例如L=(1,2,3,4) 则L[0:3]输出结果为(1,2,3)

字符串也可以用切片,例如 m='sajlkdjsalkjd' 则m[0:3] 输出'saj'

1.2迭代

如果定义一个list或tuple,可以用for循环遍历,称之为迭代

对于dict类型,也可以运用迭代,只不过输出key值

例如:

dict={'lk':'36','klk':'37','kkd':'98'}fornindict:PRintn

结果输出

kkd

lk

klk

要想输出value值只需

dict={'lk':'36','klk':'37','kkd':'98'}fornindict.itervalues():printn

同样如果想要输出 key-value的值(两个都输出),需要将代码改为 for n in dict.iteritems() #此时n为一个tuple类型

for key,v in dict.ie=ieritems()

1.3列表生成式

顾名思义 list生成式

[x*x for x in range(3)] #输出结果为[0,1,4]

[x*x for x in range(3) fi x%2==0] #输出结果为[0,4]

[m+n for m in 'ABC' for n in 'abc'] #输出结果为['Aa', 'Ab', 'Ac', 'Ba', 'Bb', 'Bc', 'Ca', 'Cb', 'Cc'](全排列)

L=['ABC','DEF','GHI'] [s.lower() for s in L] #将L中的大写字母改为小写

1.4生成器(generator)

列表生成器工作时,必须建立一个列表list,但是list的内存有限制,不可能无限大,为了弥补这一不足,生成器自然而然诞生,生成器是在不断循环的过程中推算出后面的结果,而不需要建立一个完整的list列表,所以不会占用那么多内存

生成器有很多种产生的方法,其一就是将列表生成式的[]换位()

即:g=(x*x for x in range(5)) 输出时只能用g.next()输出

即g.next() #输出0

g.next() #输出1

g.next() #输出2

g.next() #输出3

g.next() #输出4

g.next() #输出StopIteration

亦可用循环输出,即:

for n in g

print n

法二 用yield

例如斐波拉契数列 (每个数都是前两个数的和)例1,1,2,3,5,8,13.....

一般的函数定义为

deffib(max):

a,b,n=0,1,0ifn<max:

a,b,n=b,a+b,n+1printa

如果用生成器修改函数,则只需把print改为yield

deffib(max):

a,b,n=0,1,0ifn<max:

a,b,n=b,a+b,n+1yielda

调用时forninfib(6):printn

或者 o=fib(5)

o.next() 进行输出

fib不是普通的函数,而是generator,在执行过程中,遇到yield就中断,下次继续执行,我们在循环过程中不断调用yield,就会不断中断。当然要给循环设置一个条件来退出循环,不然就会产生一个无限数列出来。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航