一、條件和迴圈 1. if語句 例如: 一定要註意條件語句結尾的冒號,以及代碼段的縮進。 只要if參數是非零數值、非空字元串、非空list等,就判斷為True,否則為False。 2.迴圈 range(num):返回0到num-1之間的整數。例如: for迴圈:for x in ...迴圈就是把每個 ...
一、條件和迴圈
1. if語句
if <條件判斷1>: <執行1> elif <條件判斷2>: <執行2> else: <執行4>
例如:
age=5 if age>=18: print 'adult' elif age>=6: print 'teenager' else: print 'kid'
一定要註意條件語句結尾的冒號,以及代碼段的縮進。
只要if參數是非零數值、非空字元串、非空list等,就判斷為True
,否則為False
。
2.迴圈
range(num):返回0到num-1之間的整數。例如:
print range(5) >>>[0,1,2,3,4]
for迴圈:for x in ...
迴圈就是把每個元素代入變數x
,然後執行縮進塊的語句。
s=0 for i in range(101): s+=i print s
while迴圈:只要條件滿足,就不斷迴圈,條件不滿足時退出迴圈。
i=1 s=0 while(i<=100): s=s+i i=i+1 print s
3.迭代
dict類型for ..in ..迭代有以下幾種方式:
d={'a':1,'b':2,'c':3}
預設迭代key
for k in d: print k
iterkeys()返回key迭代器
for key in d.iterkeys(): print key
itervalues()返回value迭代器
for value in d.itervalues(): print value
iteritems()返回鍵值對迭代器
for key,value in d.iteritems(): print key+"="+str(value)
判斷對象是否可迭代:通過collections模塊的Iterable類型判斷
from collections import Iterable print isinstance(d,Iterable)
帶下標迭代:Python內置的enumerate
函數可以把一個list變成索引-元素對
l=range(5) for i,value in enumerate(l): print i,value
二、生成式
1.列表生成式
列表生成式是python受歡迎的語法之一,通過一句簡潔的語法就可以對一組元素進行過濾,還可以對得到的元素進行轉換處理。語法格式為:
[exp for val in collection if condition]
相當於
result=[] for val in collection: if(condition): result.append(exp)
我們看個例子:將列表中的字元串轉換為小寫組成新的列表。
L=['Hello',10,'World',None] print [s.lower() for s in L if isinstance(s,str)] 運行結果: ['hello', 'world']
2.字典生成式
字典生成式基本格式如下:
{key-exp:val-exp for value in collection if condition}
例如:
print {i:i*10 for i in range(1,10) if(i%2==0)} 運行結果為: {8: 80, 2: 20, 4: 40, 6: 60}
3.集合生成式
集合生成式格式和列表生成式類似,只不過用的是大括弧:
{exp for value in collection if condition}
例如:統計列表中字元串元素的各種長度。
L=['Hello',10,'World',None,'aa'] print {len(x) for x in L if isinstance(x,str)} 運行結果: set([2, 5])
4.嵌套列表生成式
嵌套列表生成式要註意for迴圈的順序。
例如:我們想提取由兩個列表組成的嵌套列表中,含有a的字元串:
L1=[['Cathy','Li'],['Zhang','Wang','Mike','Tom','Jack']] print [name for list in L1 for name in list if name.count('a')>0] 運行結果: ['Cathy', 'Zhang', 'Wang', 'Jack']
我們還可以將嵌套列表中的數據進行扁平化展現,例如:
L2=[(1,3,5),(2,4,6),(100,200)] print [value for t in L2 for value in t] 運行結果: [1, 3, 5, 2, 4, 6, 100, 200]
發現語法太簡潔啦!!
三、生成器
在Python中,有一種自定義迭代器的方式,稱為生成器(Generator)。
定義生成器的兩種方式:
1.創建一個generator,只要把一個列表生成式的[]
改成()
,就創建了一個generator:
l=[x for x in range(1,10)] print l g=(x for x in range(1,10)) print g.next() print g.next() for x in g: print x 運行結果: [1, 2, 3, 4, 5, 6, 7, 8, 9] 1 2 3 4 5 6 7 8 9
generator保存的是演算法,每次調用next()
,就計算出下一個元素的值,直到計算到最後一個元素,沒有更多的元素時,拋出StopIteration的錯誤。
2.定義generator的另一種方法。如果一個函數定義中包含yield
關鍵字,那麼這個函數就不再是一個普通函數,而是一個generator:
def fib(n): a=1 b=1 i=0; yield a yield b while(i<n): a,b=b,a+b i+=1 yield b for x in fib(10): print x 運行結果: 1 1 2 3 5 8 13 21 34 55 89 144
生成器和普通函數區別:
普通函數是順序執行,遇到return語句或者最後一行函數語句就返回;
而變成generator的函數,在每次調用next()
的時候執行,遇到yield
語句返回,再次執行時從上次返回的yield
語句處繼續執行。
def test(): print 1 yield print 2 yield print 3 yield t=test() t.next()#運行結果1 t.next()#運行結果2 t.next()#運行結果3