1. 程式人生 > >python2.7學習筆記(6) ——高階特性:切片、迭代、列表生成式、生成器

python2.7學習筆記(6) ——高階特性:切片、迭代、列表生成式、生成器

切片

用於擷取list中的元素,比如L是一個list
L[a : b] a

迭代

如果給定一個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代(Iteration)。
只要是可迭代物件,無論有無下標,都可以迭代
如何判斷一個物件是可迭代物件呢?方法是通過collections模組的Iterable型別判斷:

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> 
isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整數是否可迭代 False

列表生成式

列表生成式即List Comprehensions,是Python內建的非常簡單卻強大的可以用來建立list的生成式。

生成器

通過列表生成式,我們可以直接建立一個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立一個包含100萬個元素的列表,不僅佔用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素佔用的空間都白白浪費了。

所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在Python中,這種一邊迴圈一邊計算的機制,稱為生成器(Generator)。generator儲存的是演算法

建立方法:
一、只要把一個列表生成式的[]改成(),就建立了一個generator
使用generator的next() 方法可以每次計算出下一個值,但是沒次使用next方法太過麻煩而且變態,所以經常使用迭代來使用,generator也是一個可迭代物件

二、使用函式來表達一個演算法的時候,用print來打印出數字,我們可以將print換成yield,執行流程是,沒次碰到yield就返回,當使用next方法時,就從上次退出的yield方法繼續執行下去。