當前位置:成語大全網 - 新華字典 - 舉例講解如何在Python編程中進行叠代和遍歷

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

叠代

首先理解下什麽是叠代,python中所有從左往右掃面對象的方式都是可叠代的

有哪些方式是可叠代的:

1.文件操作

我們讀取文件的時候,會用到壹個readline()方法,其實它就是壹個叠代器,它會返回當前的數據,然後自動的調用內置的next()方法來讓文件的讀取頭自動的移動到當前的下面壹行,準備下次的讀取,到達文件末尾時,就會返回空字符串.

>>> f=open('hello.py')

>>> f.readline()

'#!/usr/bin/python2.5

'

>>> f.readline()

'print "hello.word!"

'

>>> f.readline()

'

'

>>> f.readline()

''

>>> for i in open('hello.py'):

... print(i)

...

#!/usr/bin/python2.5

print "hello.word!"

用上面這樣方式來讀取文件內容的話,速度很快,內存占用也比較低,特別適合操作大文件.

下面這個方式適合操作壹些小的文件,速度和效率沒有上面的好,所以建議以後操作文件的話,盡量用上面的。

>>> for i in open('hello.py').readlines():

... print i

...

#!/usr/bin/python2.5

print "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.5

for 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.5

x='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.5

z = {1:'a',2:'b',3:'c'}

for i in z:

print z[i]

root@10.1.6.200:python# python 5.py

a

b

c

2.通過字典items方法,獲取所有鍵值對,在利用元組拆分的方法獲得對應值.

root@10.1.6.200:python# cat 5.py

#!/usr/bin/python2.5

z = {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 a

2 b

3 c