for語句也支持一個選用的else塊,它的工作就像在while循環中一樣:如果循環離開時沒有碰到break語句,就會執行(也就是序列所有元素都被訪問過了) break和continue語句也可用在for循環中,就像while循環那樣。for循環完整的格式如下: for <target> in <object>: ??? <statements> ??? if <test>:break ??? if <test>:conitnue else: ??? <statements>
對比shell的for循環 for? 變量名 in 列表 do ??? 命令1 ??? 命令1 done
for i in 1 2 3? do? ??????? echo $i? don
for i in `ls -1 /root` do? ??????? echo $i? done
2、例子 1)基本應用 >>> x=[1,2,3,4,5] >>> for i in x: ...???? print i ...? 1 2 3 4 5 >>> for i in x:?? ...???? if i==3:break ...???? print i ...? 1 2 >>> for i in x:?????? ...???? print i ...???? if i==3:break ...? 1 2 3 注意if語句的位置 > D={'name':['diege','lily','kelly'],'class':2012,'number':48} >>> for i in D:????? ...???? print i,'=>',D[i]?? ...? number => 48 name => ['diege', 'lily', 'kelly'] class => 2012 多層 >>> for i in D:?????????????????????? ...???? if type(D[i])==list:????????? ...???????????? for l in D[i]:??????? ...???????????????????? print l?????? ...???? else: ...???????????? print? D[i] ...? 48 diege lily kelly 2012 for元組賦值 首行定義了一個賦值【一些目標】 >>> T=[(1,2),(3,4),(5,6)] >>> for (a,b) in T: ...???? print a,b ...? 1 2 3 4 5 6
for i in D: ??????? if type(D[i])==list: ??????????????? for l in D[i]: ??????????????????????? print l ??????? elif type(D[i])==tuple: ??????????????? for t in D[i]: ??????????????????????? print t ??????? elif type(D[i])==dict: ???????????????? for d in D[i]: ??????????????????????? print d ??????? else: ??????????????? print?? D[i] 代替break的 >>> items=['diege',999,(3,7),1.3] >>> tests=[(3,7),3.14] >>> for key in tests:? ...???? for item in items:????????????? ...???????????? if key==item:?????? ...???????????????????? print key,'was found' ...???????????????????? break ...???? else: ...???????????? print key,'not found!'? ...? (3, 7) was found 3.14 not found 有點類似查找的功能。 收集兩個序列中相同元素 >>> seq1='diege' >>> seq2='decgl' >>> res=[]?????????????????? >>> for x in seq1:?????????? ...???? if x in seq2:?????????? ...???????????? res.append(x) ...? >>>? >>> res ['d', 'e', 'g', 'e'] 準確的說是顯示seq1和seq2都用的在seq1一次順序。
3、為什么要在意“文件掃描” 循環讀取文件:while在文件結尾時使用break >>> fl=open('/etc/rc.conf')? >>> while True: ...???? char=fl.read(1) ...???? if not char:break ...???? print char, MS for循環打印出來的字體正常點,呵呵。 >>> for char in open('/etc/rc.conf'):for char in open('/etc/rc.conf').read():的縮寫 ...???? print char ...?
使用while按行處理 >>> fl=open('/etc/rc.conf') >>> while True:????????????? ...???? line=fl.readline() ...???? if not line:break ...???? print line, ...? 按行讀取文件文件時,for循環是最容易編寫及執行最快的選擇 >>> for line in open('/etc/rc.conf'):#默認read() ...???? print line ...? >>> for line in open('/etc/rc.conf').readlines(): ...???? print line ...? readlines會一次把文件載入到行字符串的列表 >>> for line in open('/etc/rc.conf').xreadlines(): ...???? print line ...? xreadlines則是按需求加載文字列,從而避免大型文件導致內存溢出。 每個步驟所讀取的數據越多,程序會員越快。