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

Python 的迭代器與zip詳解

 更新時(shí)間:2021年11月03日 15:19:16   作者:埠默笙聲聲聲脈  
本篇文章主要介紹Python 的迭代器與zip,可迭代對(duì)象的相關(guān)概念,有需要的小伙伴可以參考下,希望能夠給你帶來幫助

首先拋出一個(gè)困擾本人許久的問題:

nums = [1,2,3,4,5,6]
numsIter = iter(nums)
for _ in zip(*[numsIter]*3):
    print(_)
print(list(numsIter))

則控制臺(tái)輸出如何?

關(guān)于迭代器

1.對(duì)于支持迭代的集合對(duì)象,可以創(chuàng)建其迭代器對(duì)象。迭代器對(duì)象儲(chǔ)存了可迭代對(duì)象的地址和遍歷的位置,迭代器對(duì)象從集合的第一個(gè)元素開始訪問,所有的元素被訪問完迭代器被消耗(仍然占地址),但清空儲(chǔ)存的信息(即地址和遍歷位置)。使用list()函數(shù)或 * 操作符可以獲取所有遍歷的內(nèi)容,結(jié)束后迭代器被消耗。

nums = [1,2,3,4,5,6]
numsIter = iter(nums)
print(nums)
print(list(nums))
print(nums)
print(list(nums))

輸出為:

<list_iterator object at 0x00000205944619D0>
[1,2,3,4,5,6]
<list_iterator object at 0x00000205944619D0>
[]

第二次鍵入 print(list(nums)) 時(shí)輸出為空,因?yàn)榈鲗?duì)象已經(jīng)找不到地址了。

2.復(fù)制迭代器對(duì)象,得到的是一個(gè)迭代器對(duì)象的引用,即地址,而不是新建一個(gè)迭代器。因此,遍歷位置是共同的。

nums = [1,2,3,4,5,6]
numsIter = iter(nums)
numsIter_list = [numsIter] * 2
print(numsIter)
print(numsIter_list)

for _ in numsIter_list:
    print(next(_))

 輸出為:

<list_iterator object at 0x0000020594445A00>
[<list_iterator object at 0x0000020594445A00>, <list_iterator object at 0x0000020594445A00>]
1
2

關(guān)于zip

1.在創(chuàng)建zip對(duì)象時(shí),并沒有直接生成新數(shù)據(jù),而是存儲(chǔ)了要操作對(duì)象的迭代器,當(dāng)真正需要的時(shí)候,才通過迭代器遍歷數(shù)據(jù)。因此,當(dāng)使用list()函數(shù)或 * 操作符解壓zip對(duì)象時(shí),當(dāng)然是會(huì)消耗掉儲(chǔ)存的迭代器,使得再一次解壓時(shí)返回為空。

P = [1,2,3]
Q = [4,5,6]
PQ_zip = zip(P,Q)
print(PQ_zip)
print(list(PQ_zip))
print(list(PQ_zip))

 輸出為:

 <zip object at 0x0000020594520140>
[(1, 4), (2, 5), (3, 6)]
[]

2.zip之所以能work,就是利用了迭代器儲(chǔ)存的遍歷位置,逐一地獲取數(shù)據(jù),直到其中一個(gè)迭代器被消耗掉。文首的問題就是最好的例子 。

nums = [1,2,3,4,5,6]
numsIter = iter(nums)
for _ in zip(*[numsIter]*3):
    print(_)
print(list(numsIter))

 輸出為:

(1, 2, 3)
(4, 5, 6)
[]

可以看見,實(shí)現(xiàn)的功能是把單行數(shù)據(jù)變成了3列2行。這是怎么做到的呢?執(zhí)行zip時(shí),依次訪問三個(gè)同樣的迭代器,每次訪問,迭代器的遍歷位置都會(huì)加1,于是第一輪結(jié)束后zip獲取了(1,2,3),同理第二輪則獲取了(4,5,6),隨后迭代器被消耗。第三輪zip對(duì)象已經(jīng)沒有迭代器可用,于是結(jié)束執(zhí)行。最后 print(list(numsIter)) 發(fā)現(xiàn)迭代器確實(shí)已經(jīng)被消耗。

3.當(dāng)使用 print 顯示迭代器或zip對(duì)象的內(nèi)容時(shí),list() 和 * 操作符幾乎沒有區(qū)別。但上述例子中,只能用 * 操作符來實(shí)現(xiàn),因?yàn)?* 操作符實(shí)際上是返回對(duì)象的地址和遍歷位置,而 list() 會(huì)直接遍歷完畢從而消耗掉迭代器。

nums = [1,2,3]
numsIter = iter(nums)
print(numsIter)
for _ in zip(list(numsIter)*3):
    print(_)
print(list(numsIter))

輸出為:

 <list_iterator object at 0x0000020594445B80>
(1,)
(2,)
(3,)
(1,)
(2,)
(3,)
(1,)
(2,)
(3,)
[]

總結(jié):

在熟悉迭代器和zip()函數(shù)的同時(shí),掌握了一個(gè)將一維數(shù)據(jù)變?yōu)槎S數(shù)據(jù)的方法。

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Python實(shí)現(xiàn)發(fā)送郵件到自己郵箱

    Python實(shí)現(xiàn)發(fā)送郵件到自己郵箱

    在日常開發(fā)中,我們經(jīng)常需要監(jiān)控應(yīng)用程序的狀態(tài),及時(shí)發(fā)現(xiàn)問題并采取措施解決。而通過郵件發(fā)送報(bào)警信息則是一種常見的實(shí)現(xiàn)方式。本文就來介紹一下Python實(shí)現(xiàn)發(fā)送郵件到自己郵箱的方法
    2023-04-04
  • Python中類的初始化特殊方法

    Python中類的初始化特殊方法

    本文給大家介紹一下Python中類才初始化時(shí)候的特殊方法,通過實(shí)例給大家做了分析,一起來學(xué)習(xí)下。
    2017-12-12
  • Python腳本實(shí)現(xiàn)一鍵自動(dòng)整理辦公文件

    Python腳本實(shí)現(xiàn)一鍵自動(dòng)整理辦公文件

    這篇文章主要介紹了Python實(shí)現(xiàn)腳本一鍵自動(dòng)整理辦公文件,文件下載文件夾就變得亂七八糟,整理的時(shí)候非常痛苦,巴不得有一個(gè)自動(dòng)化的工具幫我歸類文檔。下面小編就給大家分享自動(dòng)化整理文件的小技巧,需要的朋友可以參考一下文章內(nèi)容
    2022-02-02
  • Python實(shí)現(xiàn)APP自動(dòng)化發(fā)微信群消息的示例代碼

    Python實(shí)現(xiàn)APP自動(dòng)化發(fā)微信群消息的示例代碼

    本文主要介紹了Python實(shí)現(xiàn)APP自動(dòng)化發(fā)微信群消息的示例代,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下碼
    2022-01-01
  • Python縮進(jìn)和冒號(hào)詳解

    Python縮進(jìn)和冒號(hào)詳解

    下面小編就為大家?guī)硪黄狿ython縮進(jìn)和冒號(hào)詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Python?turtle庫(kù)(繪制螺旋正方形)

    Python?turtle庫(kù)(繪制螺旋正方形)

    這篇文章主要介紹了Python?turtle庫(kù)(繪制螺旋正方形),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python腳本實(shí)現(xiàn)圖片文件批量命名

    Python腳本實(shí)現(xiàn)圖片文件批量命名

    這篇文章主要為大家詳細(xì)介紹了一個(gè)用python第三方庫(kù)pillow寫的批量處理圖片命名的腳本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-02-02
  • python 使用opencv 把視頻分割成圖片示例

    python 使用opencv 把視頻分割成圖片示例

    今天小編就為大家分享一篇python 使用opencv 把視頻分割成圖片示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python3環(huán)境安裝Scrapy爬蟲框架過程及常見錯(cuò)誤

    Python3環(huán)境安裝Scrapy爬蟲框架過程及常見錯(cuò)誤

    這篇文章主要介紹了Python3環(huán)境安裝Scrapy爬蟲框架過程及常見錯(cuò)誤 ,本文給大家介紹的非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    經(jīng)常會(huì)遇到圖片格式需要轉(zhuǎn)換的情況,這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì)、實(shí)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論

肥乡县| 南岸区| 合作市| 绥化市| 象州县| 嘉祥县| 长葛市| 商水县| 永福县| 建宁县| 翁牛特旗| 项城市| 平乡县| 嘉黎县| 金华市| 兰坪| 莱阳市| 克什克腾旗| 黎平县| 兴和县| 桃园市| 沐川县| 海淀区| 黄浦区| 施甸县| 吉林省| 平顺县| 奉化市| 麻江县| 家居| 新丰县| 定西市| 建瓯市| 新田县| 千阳县| 邯郸市| 太原市| 额济纳旗| 浠水县| 大理市| 连州市|