標籤:
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‘}
for n in dict:
print n
結果輸出
kkd
lk
klk
要想輸出value值只需
dict={‘lk‘:‘36‘,‘klk‘:‘37‘,‘kkd‘:‘98‘}
for n in dict.itervalues():
print n
同樣如果想要輸出 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.....
一般的函數定義為
def fib(max):
a,b,n=0,1,0
if n<max:
a,b,n=b,a+b,n+1
print a
如果用產生器修改函數,則只需把print改為yield
def fib(max):
a,b,n=0,1,0
if n<max:
a,b,n=b,a+b,n+1
yield a
調用時 for n in fib(6):
print n
或者 o=fib(5)
o.next() 進行輸出
fib不是普通的函數,而是generator,在執行過程中,遇到yield就中斷,下次繼續執行,我們在迴圈過程中不斷調用yield,就會不斷中斷。當然要給迴圈設定一個條件來退出迴圈,不然就會產生一個無限數列出來。
python進階特性