下面要介紹的enumerate、range、zip、reversed、sorted屬於python內建的函式或者類別,返回的物件都可通過迭代方法訪問。
一、 enumerate函式
1. 語法:enumerate(iterable, start=0)
1) 該函式python 2.3. 以上版本可用,2.6 新增 start 引數,返回乙個列舉物件,該列舉物件是乙個迭代器,該函式將iterable物件中的元素轉換成列舉值,並每個元素分配乙個從start開始的索引值;
2) 引數iterable,表示乙個可迭代物件如序列;
3) 引數start表示索引值的起始值,預設為0;
4) enumerate() 返回的列舉物件通過next函式或 __next__ 方法返回乙個元組,裡面包含索引值(從 start 開始,預設為 0)和通過迭代 iterable 獲得的對應元素值。
2. 對於乙個可迭代的(iterable)/可遍歷的物件,enumerate可以將其組成乙個索引序列,利用它可以同時獲得索引和值,這種方式一般用在 for 迴圈當中;
3. 注意其返回值是乙個迭代器,遍歷訪問後元素就清空了
4. 舉例:
1) s=enumerate('abc',100)
l =list(s) #l的值為:[(100, 'a'), (101, 'b'), (102, 'c')]
2) for index, string in enumerate('abc',10):print(index,':',string,', ',end='')
輸出:10 : a , 11 : b , 12 : c ,
二、 range函式
1. 語法:range(start, stop[, step])
1) 返回值是乙個不可變的數字序列可迭代物件,型別為range,該數字序列通常用於在 for 迴圈中迴圈指定的次數;
2) 引數start為可選引數,表示數字序列的起始值,可以省略,預設為0;
3) 引數stop為必選引數,表示整數序列的終止值,產生的序列的最大值必須小於該值,當range只帶乙個引數呼叫時,該引數就是stop的值;
4) 引數step表示序列兩個元素間的步長,也就是序列中相鄰兩個元素的差值,可選引數,預設為1;每個元素的值r[i]= start + step*i ,當step為正整數時產生的序列是公升序排序, r[i] < stop,當step為負整數時產生的序列是降序排序, r[i] >stop。
2. 說明
1) 如果第乙個元素 不符合stop值對序列的限制條件,則該 range 物件為空;
2) range 物件支援索引訪問,也支援負索引,支援負索引時會將其解讀為從正索引所確定的序列的末尾開始索引,這個與序列訪問方法一樣;
3) range 物件支援切片訪問,但與索引訪問方式不一樣,切片訪問返回的還是乙個range物件,假設:切片的開始位置索引為s,結束位置為e,當step為正數時則返回的range物件為:
range(start+s*step,max(stop,start+e*step),step)
如果step為負數,則返回的range物件為:range(start+s*step,min(stop,start+e*step),step)
4) range 型別相比常規 list 或 tuple 的優勢在於乙個 range 物件總是占用固定數量的(較小)記憶體,不論其所表示的範圍有多大(因為它只儲存了 start, stop 和 step 值,並會根據需要計算具體單項或子範圍的值),某種程度上與生成器表示式類似,但它不屬於生成器,也不是迭代器。
5) 使用 == 和 != 檢測 range 物件是否相等是將其作為序列來比較。 也就是說,如果兩個 range 物件表示相同的值序列就認為它們是相等的。 (請注意比較結果相等的兩個 range 物件可能會具有不同的 start, stop 和 step 屬性,例如 range(0) == range(2, 1, 3) 而 range(0, 3, 2) == range(0, 4, 2)。)
6) 注意:在python3以前有個xrange函式,python3以後取消了,其功能合併到了range
三、 zip函式
1. 語法:zip(*iterables)
1) 引數說明:iterables表示多個可迭代物件,可以沒有;
2) 返回值為乙個zip物件,這個物件也是乙個迭代器,該迭代器中的元素是元組,元組的元素i按引數順序來自於這多個可迭代物件的第i個元素。當所輸入可迭代引數物件中最短的乙個被耗盡時,迭代器將停止迭代。 當只有乙個可迭代物件引數時,它將返回乙個單元組的迭代器。 不帶引數時,它將返回乙個空迭代器。
2. 說明:
1) 返回物件可以轉換為列表、字典等型別,但轉換為字典型別時,zip必須且只能有2個迭代物件作為引數;
2) zip物件是個迭代器,因此遍歷一次後元素會清空;
3) 要檢視其內容,可使用list或dict將其轉換為列表
3. 舉例:按順序執行下列指令碼
numbers=[1,2,3,4,5,6]
abc=['a','b','c']
abc='abc'
z=zip(numbers,abc,abc)
list(z) #輸出為:[(1, 'a', 'a'), (2, 'b', 'b'), (3, 'c', 'c')]
z=zip(numbers,abc,abc) #思考一下,為什麼要再次zip?
dict(z) #執行報錯,因為使用了3個迭代物件不能建立字典資料
list(z) #輸出為:[(2, 'b', 'b'), (3, 'c', 'c')],思考一下為什麼比上面少了乙個?
z=zip(numbers,abc,abc)
for n,a,a in z:print(n,a,a,end='; ') #輸出為:1 a a; 2 b b; 3 c c;
四、 reversed函式
1. 語法:reversed(seq)
2. 說明:
1) 返回乙個與引數物件順序倒轉的 iterator物件,原引數物件保持不變,返回物件型別為reversed,是乙個可迭代物件,不能直接訪問,可以轉換為其他物件或通過for迴圈方法訪問
2) seq 為任何序列或可迭代的物件,必須是乙個具有 __reversed__() 方法的物件或者是支援序列協議的物件(支援__len__() 方法和 從0開始的整數型別引數的__getitem__() 方法)
3. 舉例:
s="abcd"
s2=reversed(s)
type(s2) #輸出:
list(s2) #輸出:['d', 'c', 'b', 'a'],s保持不變
s2 #輸出:
五、 sorted函式
1. 語法:sorted(iterable, *, key=none, reverse=false)
2. 說明:
1) 根據 iterable 中的項返回乙個新的已排序列表,返回值為已排序的列表,原引數iterable 中的資料不會發生變化;
2) key 指定帶有單個引數的函式,用於從 iterable 的每個元素中提取用於比較的鍵 (例如 key=str.lower)。 預設值為 none (直接比較元素)
3) reverse 為乙個布林值。 如果設為 true,則每個列表元素將按反向順序比較進行排序
3. 舉例
s="abcd"
s1=sorted(s) #s1的資料為:['a', 'd', 'b', 'c']
s2=sorted(s,key=str.lower) #s2的資料為:['a', 'b', 'c', 'd']
python中的可迭代物件與迭代器
可迭代協議 只要含有 iter 方法的資料型別都是可迭代的 可迭代物件 列表,字串,等。整數型別不可迭代 特點 可迭代物件都可用for迴圈。檢測某個變數 值是否為可迭代的方法 方法一 print iter in dir print iter in dir 123 結果為 true false 方法二...
第7 5節 揭開Python類中self的面紗
在上節已經引入介紹了類定義,並簡單介紹了類變數 例項變數 類方法和例項方法,後面章節還會進一步詳細介紹相關的內容。本節要介紹的self是與類變數 例項變數 類方法和例項方法具體定義實現強相關的。一 什麼是self?在python中self實際上是指向類宣告的例項物件自身,如果要在例項方法中訪問例項變...
第7 8節 Python中隱秘的類封裝方法
前面章節已經介紹了python中的多型和繼承,本節將介紹物件導向程式設計oop三大特徵的另乙個特徵 封裝。一 概念 封裝是將物件的狀態資訊 也就是資料 屬性 隱藏在物件內部,將物件的屬性和實現細節隱藏起來,不允許外部程式直接訪問物件內部資訊,而是通過類所提供的方法來實現對內部資訊的操作和訪問,讓方法...