最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年06月11日 12:01:44   作者:Citizen_Wang  
這篇文章主要介紹了Python3中的列表生成式、生成器與迭代器,結(jié)合實(shí)例形式詳細(xì)分析了Python3列表生成式、生成器與迭代器相關(guān)概念、功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python3中的列表生成式、生成器與迭代器。分享給大家供大家參考,具體如下:

列表生成式

Python內(nèi)置的一種極其強(qiáng)大的生成列表 list 的表達(dá)式。返回結(jié)果必須是列表。

基本語(yǔ)法:

[ 變量表達(dá)式 for 變量 in 表達(dá)式 ]

示例

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)

通過(guò)列表生成式,可以直接創(chuàng)建一個(gè)列表,但是,受到內(nèi)存的限制,列表容量是有限的,當(dāng)列表元素很大的時(shí)候,會(huì)很浪費(fèi)內(nèi)存空間。所以可以通過(guò)生成器 Generator 生成。

生成器 Generator

Generator 是一種一邊循環(huán)一邊計(jì)算的機(jī)制。

應(yīng)用場(chǎng)景:只需要獲得 list 中的前幾個(gè)元素,節(jié)省存儲(chǔ)空間。

使用 () 創(chuàng)建列表生成器

把列表生成式的中括號(hào) [] 修改為圓括號(hào)即可 ()

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)

打印結(jié)果如下

<generator object <genexpr> at 0x1052ec2b0>
<generator object <genexpr> at 0x1052ec468>
<generator object <genexpr> at 0x1052ec4c0>
<generator object <genexpr> at 0x1052ec518>

使用 next 調(diào)用元素:

print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())

next 方法會(huì)一個(gè)個(gè)的返回元素值,調(diào)用一次,返回一次下一個(gè)位置的元素。
該方法在沒(méi)有元素可以調(diào)用的時(shí)候,會(huì)返回 StopIteration 的錯(cuò)誤

使用循環(huán)調(diào)用元素

for i in a:
  print(i)

該方法的好處,是不會(huì)返回 StopIteration 的錯(cuò)誤

yield 關(guān)鍵字 創(chuàng)建 Generator

如果一個(gè)函數(shù)包含了yield 關(guān)鍵字,那么該函數(shù)就不再是普通的函數(shù),而是一個(gè)生成器 Generatior。

print(sum) 修改為 yield(sum),即將原來(lái)的函數(shù),修改為了生成器。

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 語(yǔ)句的函數(shù)會(huì)被特定的編譯成生成器??梢园缮善骼斫鉃榈鳌?/p>

在調(diào)用生成器運(yùn)行的過(guò)程中,每次遇到 yield 時(shí)函數(shù)會(huì)暫停并保存當(dāng)前所有的運(yùn)行信息,返回yield的值。并在下一次執(zhí)行 next()方法時(shí)從當(dāng)前位置繼續(xù)運(yùn)行。

Generator 的工作原理,是在for循環(huán)的過(guò)程中不斷計(jì)算出下一個(gè)元素,并在適當(dāng)?shù)臈l件結(jié)束for循環(huán)。

對(duì)于函數(shù)改成的generator來(lái)說(shuō),遇到return語(yǔ)句或者執(zhí)行到函數(shù)體最后一行語(yǔ)句,就是結(jié)束generator的指令,for循環(huán)隨之結(jié)束。

python 生成器可參考 http://m.fzitv.net/article/63929.htm

以下實(shí)例使用 yield 實(shí)現(xiàn)斐波那契數(shù)列

#!/usr/bin/python3
import sys
def fibonacci(n): # 生成器函數(shù) - 斐波那契
  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 是一個(gè)迭代器,由生成器返回生成
while True:
  try:
    print (next(f), end=" ")
  except StopIteration:
    sys.exit()

迭代器 iterator

  • 迭代器是訪問(wèn)集合元素的一種方式
  • 迭代器有兩個(gè)方法,生成迭代器 iter(),返回迭代器的下一個(gè)項(xiàng)目 next()
  • 迭代器對(duì)象從集合的第一個(gè)元素開始訪問(wèn),知道所有元素被訪問(wèn)結(jié)束。迭代器只能往前,不能回退。
  • 字符串、列表、元組 都可以用于創(chuàng)建迭代器

迭代器 iterator 和可迭代對(duì)象 iterable 的區(qū)別在于:

可以直接作用于for循環(huán)的對(duì)象統(tǒng)稱為可迭代對(duì)象:Iterable,list、tuple、dict、set、str、Generator 等等。

可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象稱為迭代器:Iterator

使用 iter 創(chuàng)建迭代器

list、dict、str等數(shù)據(jù)類型不是Iterator,但是可以通過(guò) iter() 來(lái)創(chuàng)建迭代器
list=[1,2,3,4]
it = iter(list)  # 創(chuàng)建迭代器對(duì)象
print (next(it))  # 輸出迭代器的下一個(gè)元素
  1
print (next(it))
  2

Python迭代器 Iterator 可參考:http://m.fzitv.net/article/128183.htm

附:廖學(xué)峰Python相關(guān)資料下載:

廖雪峰 Python2.7 教程 PDF版:http://m.fzitv.net/books/536707.html

廖雪峰 python3 教程(帶標(biāo)簽完整版):http://m.fzitv.net/books/536708.html

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 一文教你解決所有Python中文亂碼問(wèn)題

    一文教你解決所有Python中文亂碼問(wèn)題

    我們?cè)诰帉懘a時(shí)總是遇到各種中文亂碼的問(wèn)題,所以本文就來(lái)為大家總結(jié)一下遇到的中文亂碼問(wèn)題和對(duì)應(yīng)的解決方案,以及為什么會(huì)出現(xiàn)中文亂碼的問(wèn)題,希望對(duì)大家有所幫助
    2023-12-12
  • python繪制多個(gè)子圖的實(shí)例

    python繪制多個(gè)子圖的實(shí)例

    今天小編就為大家分享一篇python繪制多個(gè)子圖的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python3.6+Django2.0以上 xadmin站點(diǎn)的配置和使用教程圖解

    Python3.6+Django2.0以上 xadmin站點(diǎn)的配置和使用教程圖解

    django自帶的admin站點(diǎn)雖然功能強(qiáng)大,但是界面不是很好看。這篇文章主要介紹了Python3.6+Django2.0以上 xadmin站點(diǎn)的配置和使用 ,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Python 實(shí)現(xiàn)進(jìn)度條的六種方式

    Python 實(shí)現(xiàn)進(jìn)度條的六種方式

    這篇文章主要介紹了Python 實(shí)現(xiàn)進(jìn)度條的六種方式,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • python入門之Tkinter使用的方法詳解

    python入門之Tkinter使用的方法詳解

    作為Python開發(fā)者,圖形用戶界面(GUI)開發(fā)是必備技能之一,本文將介紹Python自帶的GUI工具包TKinter,這篇文章主要給大家介紹了關(guān)于python入門之Tkinter使用的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Python學(xué)習(xí)筆記(二)基礎(chǔ)語(yǔ)法

    Python學(xué)習(xí)筆記(二)基礎(chǔ)語(yǔ)法

    對(duì)于任何一門語(yǔ)言的學(xué)習(xí),學(xué)語(yǔ)法是最枯燥無(wú)味的,但又不得不學(xué),基礎(chǔ)概念較繁瑣,本文將不多涉及概念解釋,用例子進(jìn)行相關(guān)解析,適當(dāng)與C語(yǔ)言對(duì)比,避免陷入語(yǔ)法的苦海。我認(rèn)為初學(xué)者學(xué)習(xí)語(yǔ)法的目標(biāo)是學(xué)會(huì)使用即可,關(guān)于對(duì)概念的深入理解,剖析,沒(méi)有一定的知識(shí)積累是很難做到的。
    2014-06-06
  • 如何基于python實(shí)現(xiàn)單目三維重建詳解

    如何基于python實(shí)現(xiàn)單目三維重建詳解

    單目三維重建是根據(jù)單個(gè)攝像頭的運(yùn)動(dòng)模擬雙目視覺(jué)獲得物體在空間中的三維視覺(jué)信息,下面這篇文章主要給大家介紹了關(guān)于如何基于python實(shí)現(xiàn)單目三維重建的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Python實(shí)現(xiàn)GUI學(xué)生管理系統(tǒng)的示例代碼

    Python實(shí)現(xiàn)GUI學(xué)生管理系統(tǒng)的示例代碼

    這篇文章主要為大家介紹了如何留Python語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易的GUI學(xué)生管理系統(tǒng),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考下
    2022-06-06
  • python空元組在all中返回結(jié)果詳解

    python空元組在all中返回結(jié)果詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python空元組在all中返回結(jié)果詳解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • Python生成六萬(wàn)個(gè)隨機(jī),唯一的8位數(shù)字和數(shù)字組成的隨機(jī)字符串實(shí)例

    Python生成六萬(wàn)個(gè)隨機(jī),唯一的8位數(shù)字和數(shù)字組成的隨機(jī)字符串實(shí)例

    今天小編就為大家分享一篇Python生成六萬(wàn)個(gè)隨機(jī),唯一的8位數(shù)字和數(shù)字組成的隨機(jī)字符串實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03

最新評(píng)論

聊城市| 阿坝县| 桃江县| 宣化县| 福清市| 特克斯县| 涟源市| 凤庆县| 泸定县| 沅陵县| 固始县| 墨玉县| 扎囊县| 彝良县| 子长县| 营山县| 安溪县| 邵东县| 漳浦县| 桃园市| 巴青县| 获嘉县| 大连市| 孟村| 姚安县| 禄丰县| 新野县| 怀来县| 钦州市| 临江市| 攀枝花市| 新乡市| 探索| 社旗县| 股票| 宜章县| 前郭尔| 迁安市| 南宁市| 天津市| 铅山县|