Python 速查手冊

9.4 迭代器相關

迭代器相關的內建函數包括各種迭代器的處理,以下為列表說明

參數版本功能
all(i)判斷參數的所有元素是否都為迭代器。
any(i)判斷參數的任一元素是否為迭代器。
enumerate(i, start=0)回傳附加索引值的 enumerate 物件。
filter(f, i)回傳依 f 過濾 i 後的 filter 物件。
iter(o, s)回傳 o 的迭代器物件,或是依 s 結束符號揀取 o 的迭代器物件。
map(f, i)回傳依 f 判斷過 i 的 map 物件。
next(i, d)回傳迭代器物件 i 的下一個數值,如果無數值就回傳 d 。
reversed(s)回傳將 s 中元素排列倒轉過的 reversed 物件。
zip(*i)回傳配對過的 zip 物件。

all(i) 判斷參數的所有元素是否都為迭代器,舉例如下

print(all("abc"))
print(all([0, 1]))
print(all((0, 1)))
print(all({1:1, 2:2}))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator01.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator01.py
True
False
False
True
$

any(i) 判斷參數的任一元素是否為迭代器,舉例如下

print(any("abc"))
print(any([0, 1]))
print(any((0, 1)))
print(any({1:1, 2:2}))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator02.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator02.py
True
True
True
True
$

enumerate(i, start=0) 回傳參數 i 中所有元素附加索引值的 enumerate 物件,參數 start 為索引值的起始數字,舉例如下

data = ["A", "B", "C", "D"]
e = enumerate(data)
print(list(e))
e = enumerate(data, start=1)
print(list(e))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator03.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator03.py
[(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D')]
[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')]
$

filter(f, i) 回傳依參數 f 過濾 i 後的 filter 物件, f 須為函數或 lambda 運算式,舉例如下

a = [11, 2, 8, 22, 6, 4, 15]
b = filter(lambda x: x > 10, a)
print(b)
for i in b:
    print(i)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator04.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator04.py
<filter object at 0x101eba358>
11
22
15
$

iter(o, s) 回傳迭代器物件,若只有提供參數 o ,則會將 o 的元素轉化成迭代器的元素,舉例如下

a = iter("123")
print(a)
for i in a:
    print(i)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator05.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator05.py
<str_iterator object at 0x101d85ac8>
1
2
3
$

iter(o, s) 若是提供兩個參數,第一個參數 o 必須是可呼叫物件,第二個參數 s 則是結束的回傳值,這個參數版本通常用在檔案處理上,舉例如下

with open('quotes.txt') as fp:
    for line in iter(fp.readline, ''):
        print(line)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator06.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator06.py
Hello world!
 
There is no spoon.
 
Manners maketh the man.
 
You need time to know, to forgive and to love.
 
And then be a simple man.
$

map(f, i) ,回傳依第一個參數 f 判斷過第二個參數 imap 物件, f 為函數, i 則是迭代器,舉例如下

d1 = [1, 2, 78, 34, 56]
d2 = map(lambda x: x > 50, d1)
print(d2)
print(list(d2))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator07.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator07.py
<map object at 0x1040ba4e0<
[False, False, True, False, True]
$

next(i, d) 回傳迭代器物件 i 的下一個數值,如果無數值就回傳 d ,舉例如下

d1 = [1, 3]
d2 = iter(d1)
print(next(d2, -1))
print(next(d2, -1))
print(next(d2, -1))
print(next(d2, -1))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator08.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator08.py
1
3
-1
-1
$

reversed(s) 回傳將 s 中元素排列倒轉過的 reversed 物件,舉例如下

s = "abc"
print(reversed(s))
print(list(reversed(s)))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator09.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator09.py
<reversed object at 0x101c85ac8>
['c', 'b', 'a']
$

zip(*i) 回傳配對過的 zip 物件,舉例如下

a = [1, 2]
b = [3, 4]
print(zip(a, b))
print(list(zip(a, b)))

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:fiterator10.py
# 功能:示範內建函數
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 fiterator10.py
<zip object at 0x101fbddc8>
[(1, 3), (2, 4)]
$

上一頁: 9.3 字串相關
Python 速查手冊 - 目錄
下一頁: 9.5 裝飾子相關
回 Python 教材首頁