国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python3中的列表生成式、生成器與迭代器實例詳解

2020-02-15 21:46:59
字體:
來源:轉載
供稿:網友

本文實例講述了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)

打印結果如下

<generator object <genexpr> at 0x1052ec2b0>
<generator object <genexpr> at 0x1052ec468>
<generator object <genexpr> at 0x1052ec4c0>
<generator object <genexpr> 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<n):    sum = sum + i    i += 1    yield(sum)print(type(fib(10)))for x in fib(10):  print(x)

包含 yield 語句的函數會被特定的編譯成生成器。可以吧生成器理解為迭代器。

在調用生成器運行的過程中,每次遇到 yield 時函數會暫停并保存當前所有的運行信息,返回yield的值。并在下一次執行 next()方法時從當前位置繼續運行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五常市| 电白县| 尼勒克县| 许昌市| 五指山市| 邵阳县| 如东县| 中西区| 进贤县| 晋宁县| 宁海县| 余庆县| 林口县| 兰西县| 会昌县| 左贡县| 刚察县| 林口县| 吉林市| 阿巴嘎旗| 丹东市| 海兴县| 凤冈县| 南康市| 邳州市| 克拉玛依市| 阳谷县| 顺平县| 榕江县| 庆安县| 苏尼特右旗| 白城市| 新安县| 卢龙县| 鄂尔多斯市| 依兰县| 吉隆县| 都匀市| 临海市| 正蓝旗| 阳朔县|