舉例講解如何在Python編程中進行迭代和遍曆

來源:互聯網
上載者:User
迭代
首先理解下什麼是迭代,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
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.