迭代
首先理解下什麼是迭代,python中所有從左往右掃面對象的方式都是可迭代的
有哪些方式是可迭代的:
1.檔案操作
我們讀取檔案的時候,會用到一個readline()方法,其實它就是一個迭代器,它會返回當前的資料,然後自動的調用內建的next()方法來讓檔案的讀取頭自動的移動到當前的下面一行,準備下次的讀取,到達檔案末尾時,就會返回Null 字元串.
>>> f=open('hello.py')>>> f.readline()'#!/usr/bin/python2.5\n'>>> f.readline()'print "hello.word!"\n'>>> f.readline()'\n'>>> f.readline()'' >>> for i in open('hello.py'):... print(i)... #!/usr/bin/python2.5print "hello.word!"
用上面這樣方式來讀取檔案內容的話,速度很快,記憶體佔用也比較低,特別適合操作大檔案.
下面這個方式適合操作一些小的檔案,速度和效率沒有上面的好,所以建議以後操作檔案的話,盡量用上面的。
>>> for i in open('hello.py').readlines():... print i... #!/usr/bin/python2.5print "hello.word!"
read方法和readline方法,
read()方法把整個檔案的內容放到字串裡
readline()方法則把檔案的內容按照行為單位放到列表裡。
一般要替換檔案裡的某個字元的話,最好有readline,然後用迴圈把一行一行內容迴圈出來,再尋找替換,這樣效率比整個讀到一個字串裡來尋找匹配效果更高。
2 for迴圈
例如:
>>> for i in range(5):... print(i)...
它中間處理的過程和下面的是一樣的:
>>> L=[0,1,2,3,4]>>> I=iter(L)>>> I.next()0>>> I.next()1>>> I.next()2>>> I.next()3>>> I.next()4>>> I.next()
Traceback (most recent call last): File "", line 1, in StopIteration
每次調用迭代器調用next()方法返回結果,並讓檔案指標往下移動一行,最後已StopIteration異常結束迭代。
3.列表解析:
相比python for迴圈速度會快很多
例如:
>>> L=[x+10 for x in range(10)]>>> L
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
python會在解譯器裡對range(10)進行迭代,依次把列表裡的內容取出來,賦值給最左邊的x,然後執行x+10的操作,
並且把執行好的結果儲存在列表裡。等range(10)迭代完以後就新產生了一個列表,結果就是[10,11,12,13,14,15,16,17,18,19]
從上面可以看出,這也是建立python 列表的一個方法。
上面例子也可以用for迴圈來實現.
>>> res=[]>>> for x in range(10):... res.append(x+10)... >>> res[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
從上面可以看出,python列表解析比手動的for 更加精簡,而且啟動並執行更快(往往速度回快一倍),因為他們的迭代在解析器內部是以C語言的速度執行的,而不是以手動python代碼執行的,特別對於較大的資料集合,這是使用列表解析的一個主要的效能優點.
遍曆
1.通過序列取元素的方法進行遍曆
root@10.1.6.200:python# vim 3.py
#!/usr/bin/python2.5for i in 'hello': #序列裡的字串 print i, y = [1,2,3,4,5,6] #列表for i in y: print i,
root@10.1.6.200:python# python 3.py
h e l l o 1 2 3 4 5 6
2.通過序列本身位移指數(索引)的方法進行遍曆
也就是迭代序列索引,注:迭代,重複執行一條指令.
root@10.1.6.200:python# vim 3.py
#!/usr/bin/python2.5x='hello'for i in range(len(x)): print x[i] y = [1,2,3,4,5,6]for i in range(len(y)): print y[i],
root@10.1.6.200:python# python 3.py
h e l l o 1 2 3 4 5 6
字典有2種方式取到其值:
1.先取字典key,在取索引的值
root@10.1.6.200:python# vim 5.py
#!/usr/bin/python2.5z = {1:'a',2:'b',3:'c'}for i in z: print z[i]
root@10.1.6.200:python# python 5.py
abc
2.通過字典items方法,擷取所有索引值對,在利用元組拆分的方法獲得對應值.
root@10.1.6.200:python# cat 5.py
#!/usr/bin/python2.5z = {1:'a',2:'b',3:'c'}print z.items()for m,n in z.items(): print m,n
root@10.1.6.200:python# python 5.py
[(1, 'a'), (2, 'b'), (3, 'c')]1 a2 b3 c