1. 程式人生 > >Python學習07:高階特性

Python學習07:高階特性

本文學習Python的筆記,僅供參考

本文介紹一下Python的高階特性:切片,迭代,列表生成器,生成器

切片

對於List和tuple資料結構,會經常取其中的部分進行操作,如L = [1,2,3,4,5,6] ,取前三個元素,這樣的話需要L[0],L[1],L[2] 這樣操作才能依次取出,如果多的話比較繁瑣。Python中的切片功能就很nice的完成這個任務

L = [22,33,44,55,66,77,88,99]
print(L[0:3])
輸出結果:
======================== RESTART: E:/python/Slice.py ========================
[22, 33, 44]
可見L[0:3]代表從索引0開始取元素,直到3為止,但是不包括3,位0,1,2的對應的資料。

當然索引頁可以不從0開始 如 L[1,3] ,則取出33,44

>>> L = [22,33,44,55,66,77,88,99]
>>> L[1:3]
[33, 44]
可不可以到這取,當然也是犀利的可以,方便上完全碾壓C語言,-1代表最後一個了
>>> L[-1]
99
那取後幾個個呢? L[-5:-2]
>>> L[-5:-2]
[55, 66, 77]
有了切片操作,很多地方迴圈就不再需要了。Python的切片非常靈活,一行程式碼就可以實現很多行迴圈才能完成的操作。

迭代

如果給定一個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代(Iteration)。

在Python中,迭代是通過for ... in來完成的,而很多語言比如C或者Java,迭代list是通過下標完成的。比如程式碼

L=[22,33,44,55,66,77,88,99]
i =0
for i in L:
    print(i)
完成迭代遍歷
====================== RESTART: E:/python/Iteration.py ======================
22
33
44
55
66
77
88
99

列表生成式

這個主要解決如何生成List的,一般情況下我們使用,我們看到這個比較有規律的,連續的數字,那比較複雜的呢?

>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

比如我要生成一個[1x1,2x2,3x3 ... 10x10]的列表,可以運用列表生成式

>>> [x*x for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

運用列表生成式,可以寫出非常簡潔的程式碼。例如,列出當前目錄下的所有檔案和目錄名,可以通過一行程式碼實現:

>>> import os
>>> [d for d in os.listdir('.')]
['a.py', 'function.py', 'Iteration.py', 'qiepian.py', 'Slice.py', 'test.py', 'while.py']

生成器

在Python中,這種一邊迴圈一邊計算的機制,稱為生成器:generator。實際上這個就是一個動態的生成list,一次生成過多的而不用浪費記憶體空間。

上面生成列表的[]修改為()即可生成g

>>> g= (x*x for x in range(1,11))
>>> g
<generator object <genexpr> at 0x00000057B167CFC0>
這樣生成了一個generator,我們看到的應該是一個地址,可以通過next函式列印list中的每一個元素,一直到最後一個元素
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> next(g)
16
>>> next(g)
25
>>> next(g)
36
>>> next(g)
49
>>> next(g)
64
>>> next(g)
81
>>> next(g)
100
>>> next(g)
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    next(g)
StopIteration
當然是用next 太複雜了,可以使用for迴圈遍歷了。