1.python高級(jí)特性
1.1切片
list列表 L=['Mli','add','sal','saoo','Lkkl']
L[0:3] #即為['Mli','add','sal'] 從索引0開始,到索引3結(jié)束,但不包括3
L[:3]等價(jià)于 L[0:3]
L[-2:] #即為 ['saoo','Lkkl'] 最后一個(gè)元素的索引為-1
L[-2:-1] #即為['Lkkl']
L=range(100) #則L[1:6:2]為 每個(gè)兩個(gè)元素取一個(gè)數(shù) 所以輸出為[2,4]
tuple也可以用切片操作,只是切片不可變,操作以后還是切片 例如L=(1,2,3,4) 則L[0:3]輸出結(jié)果為(1,2,3)
字符串也可以用切片,例如 m='sajlkdjsalkjd' 則m[0:3] 輸出'saj'
1.2迭代
如果定義一個(gè)list或tuple,可以用for循環(huán)遍歷,稱之為迭代
對(duì)于dict類型,也可以運(yùn)用迭代,只不過輸出key值
例如:
dict={'lk':'36','klk':'37','kkd':'98'}    for n in dict:      PRint n結(jié)果輸出
kkd
lk
klk
要想輸出value值只需
dict={'lk':'36','klk':'37','kkd':'98'}    for n in dict.itervalues():      print n同樣如果想要輸出 key-value的值(兩個(gè)都輸出),需要將代碼改為 for n in dict.iteritems() #此時(shí)n為一個(gè)tuple類型
for key,v in dict.ie=ieritems()
1.3列表生成式
顧名思義 list生成式
[x*x for x in range(3)] #輸出結(jié)果為[0,1,4]
[x*x for x in range(3) fi x%2==0] #輸出結(jié)果為[0,4]
[m+n for m in 'ABC' for n in 'abc'] #輸出結(jié)果為['Aa', 'Ab', 'Ac', 'Ba', 'Bb', 'Bc', 'Ca', 'Cb', 'Cc'](全排列)
L=['ABC','DEF','GHI'] [s.lower() for s in L] #將L中的大寫字母改為小寫
1.4生成器(generator)
列表生成器工作時(shí),必須建立一個(gè)列表list,但是list的內(nèi)存有限制,不可能無限大,為了彌補(bǔ)這一不足,生成器自然而然誕生,生成器是在不斷循環(huán)的過程中推算出后面的結(jié)果,而不需要建立一個(gè)完整的list列表,所以不會(huì)占用那么多內(nèi)存
生成器有很多種產(chǎn)生的方法,其一就是將列表生成式的[]換位()
即:g=(x*x for x in range(5)) 輸出時(shí)只能用g.next()輸出
即g.next() #輸出0
g.next() #輸出1
g.next() #輸出2
g.next() #輸出3
g.next() #輸出4
g.next() #輸出StopIteration
亦可用循環(huán)輸出,即:
for n in g
print n
法二 用yield
例如斐波拉契數(shù)列 (每個(gè)數(shù)都是前兩個(gè)數(shù)的和)例1,1,2,3,5,8,13.....
一般的函數(shù)定義為
def fib(max): a,b,n=0,1,0 if n<max: a,b,n=b,a+b,n+1 print a
如果用生成器修改函數(shù),則只需把print改為yield
def fib(max): a,b,n=0,1,0 if n<max: a,b,n=b,a+b,n+1 yield a調(diào)用時(shí) for n in fib(6): print n
或者 o=fib(5)
o.next() 進(jìn)行輸出
fib不是普通的函數(shù),而是generator,在執(zhí)行過程中,遇到y(tǒng)ield就中斷,下次繼續(xù)執(zhí)行,我們在循環(huán)過程中不斷調(diào)用yield,就會(huì)不斷中斷。當(dāng)然要給循環(huán)設(shè)置一個(gè)條件來退出循環(huán),不然就會(huì)產(chǎn)生一個(gè)無限數(shù)列出來。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注