Python3中的列表生成式、生成器與迭代器例項詳解
列表生成式
Python內建的一種極其強大的生成列表 list 的表示式。返回結果必須是列表。
基本語法:
[ 變數表示式 for 變數 in 表示式 ]
示例
a = [x ** 2 for x in range(1, 10)]
b = [x * x for x in range(1, 11) if x % 2 == 0]
c = [m + n for m in 'ABC' for n in '123']
d = {'Java': "99", 'C': "99", 'C++': "99"}
L = [k + '=' + v for k, v in d.items()]
print(a)
print(b)
print(c)
print(L)
透過列表生成式,可以直接建立一個列表,但是,受到記憶體的限制,列表容量是有限的,當列表元素很大的時候,會很浪費記憶體空間。所以可以透過生成器 Generator 生成。
生成器 Generator
Generator 是一種一邊迴圈一邊計算的機制。
應用場景:只需要獲得 list 中的前幾個元素,節省儲存空間。
使用 () 建立列表生成器
把列表生成式的中括號 [] 修改為圓括號即可 ()
a = (x ** 2 for x in range(1, 10))
b = (x * x for x in range(1, 11) if x % 2 == 0)
c = (m + n for m in 'ABC' for n in '123')
d = {'Java': "99", 'C': "99", 'C++': "99"}
L = (k + '=' + v for k, v in d.items())
print(a)
print(b)
print(c)
print(L)
列印結果如下
at 0x1052ec2b0>
at 0x1052ec468>
at 0x1052ec4c0>
at 0x1052ec518>
使用 next 呼叫元素:
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())
next 方法會一個個的返回元素值,呼叫一次,返回一次下一個位置的元素。
該方法在沒有元素可以呼叫的時候,會返回 StopIteration 的錯誤
使用迴圈呼叫元素
for i in a:
print(i)
該方法的好處,是不會返回 StopIteration 的錯誤
yield 關鍵字 建立 Generator
如果一個函式包含了yield 關鍵字,那麼該函式就不再是普通的函式,而是一個生成器 Generatior。
將 print(sum) 修改為 yield(sum),即將原來的函式,修改為了生成器。
def fib(n):
sum = 0
i = 0
while (i
sum = sum + i
i += 1
yield(sum)
print(type(fib(10)))
for x in fib(10):
print(x) 鄭州婦科醫院哪家好
包含 yield 語句的函式會被特定的編譯成生成器。可以吧生成器理解為迭代器。
在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回yield的值。並在下一次執行 next()方法時從當前位置繼續執行。
Generator 的工作原理,是在for迴圈的過程中不斷計算出下一個元素,並在適當的條件結束for迴圈。
對於函式改成的generator來說,遇到return語句或者執行到函式體最後一行語句,就是結束generator的指令,for迴圈隨之結束。
以下例項使用 yield 實現斐波那契數列
#!/usr/bin/python3
import sys
def fibonacci(n): # 生成器函式 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一個迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
迭代器 iterator
迭代器是訪問集合元素的一種方式
迭代器有兩個方法,生成迭代器 iter(),返回迭代器的下一個專案 next()
迭代器物件從集合的第一個元素開始訪問,知道所有元素被訪問結束。迭代器只能往前,不能回退。
字串、列表、元組 都可以用於建立迭代器
迭代器 iterator 和可迭代物件 iterable 的區別在於:
可以直接作用於for迴圈的物件統稱為可迭代物件:Iterable,list、tuple、dict、set、str、Generator 等等。
可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器:Iterator
使用 iter 建立迭代器list、dict、str等資料型別不是Iterator,但是可以透過 iter() 來建立迭代器
list=[1,2,3,4]
it = iter(list) # 建立迭代器物件
print (next(it)) # 輸出迭代器的下一個元素
1
print (next(it))
2
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2683631/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python3基礎 之 迭代器與生成器,生成式Python
- 生成器函式,迭代器函式
- python高階特性:切片/迭代/列表生成式/生成器Python
- 生成器與迭代器的區別
- Python迭代器與生成器Python
- 迭代器,生成器
- 迭代器、生成器
- 可迭代物件、迭代器、生成器物件
- 詳解python三大器——迭代器、生成器、裝飾器Python
- 史上最全 Python 迭代器與生成器Python
- PHP的迭代器和生成器PHP
- python 生成器&迭代器Python
- 聯合迭代器與生成器,enumerate() 內建函式真香!函式
- 可迭代物件 vs 迭代器 vs 生成器物件
- Python生成器、迭代器、可迭代物件Python物件
- 前端面試複習2:迭代器,生成器與非同步迭代器前端面試非同步
- Python迭代器生成器,私有變數及列表字典集合推導式(二)Python變數
- Python的迭代器和生成器Python
- python列表生成式和生成器Python
- Python之可迭代物件、迭代器、生成器Python物件
- 淺談ES6中迭代器和生成器
- 《python-美藏篇》1.可迭代、迭代器與生成器Python
- Python入門之迭代器與生成器的區別Python
- Python迭代器&生成器&裝飾器Python
- Python 三目運算,列表解析,裝飾器,迭代器和生成器Python
- python 中的迭代器和生成器簡單介紹Python
- Python語法—迭代器、生成器Python
- 1.5.4 Python迭代器和生成器Python
- 搞清楚 Python 的迭代器、可迭代物件、生成器Python物件
- 深入理解ES6--8.迭代器與生成器
- Python函數語言程式設計系列012:惰性列表之生成器與迭代器Python函數程式設計
- python迭代器和生成器的總結Python
- 例項詳解 Linux 中的 fork() 函式Linux函式
- python_裝飾器——迭代器——生成器Python
- python3.7 迭代器和生成器Python
- 詳解Python中yield生成器的用法Python
- PHP生成日曆(例項詳解)PHP
- 為什麼for迴圈可以遍歷list:Python中迭代器與生成器Python