国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python 的迭代器與zip詳解

Python 的迭代器與zip詳解

2022-02-23 13:03埠默笙聲聲聲脈 Python

本篇文章主要介紹Python 的迭代器與zip,可迭代對(duì)象的相關(guān)概念,有需要的小伙伴可以參考下,希望能夠給你帶來(lái)幫助

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

?
1
2
3
4
5
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è)元素開(kāi)始訪問(wèn),所有的元素被訪問(wèn)完迭代器被消耗(仍然占地址),但清空儲(chǔ)存的信息(即地址和遍歷位置)。使用list()函數(shù)或 * 操作符可以獲取所有遍歷的內(nèi)容,結(jié)束后迭代器被消耗。

?
1
2
3
4
5
6
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è)迭代器。因此,遍歷位置是共同的。

?
1
2
3
4
5
6
7
8
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í),并沒(méi)有直接生成新數(shù)據(jù),而是存儲(chǔ)了要操作對(duì)象的迭代器,當(dāng)真正需要的時(shí)候,才通過(guò)迭代器遍歷數(shù)據(jù)。因此,當(dāng)使用list()函數(shù)或 * 操作符解壓zip對(duì)象時(shí),當(dāng)然是會(huì)消耗掉儲(chǔ)存的迭代器,使得再一次解壓時(shí)返回為空。

?
1
2
3
4
5
6
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è)迭代器被消耗掉。文首的問(wèn)題就是最好的例子 。

?
1
2
3
4
5
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)
[]

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

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

?
1
2
3
4
5
6
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ù)的方法。

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

原文鏈接:https://www.cnblogs.com/wsy950409/p/15485341.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 自拍偷拍专区 | av在线播放网址 | 91人人 | 99re视频| 精品一区二区三区免费视频 | 毛片免费观看 | 亚洲一级在线 | 亚洲视频欧洲视频 | 成人久久精品 | 偷拍第一页 | 羞羞视频在线观看 | 久久综合久色欧美综合狠狠 | 日韩一区二区三区电影在线观看 | 99re国产| 一级黄色毛片免费观看 | 久久精品久久久久电影 | 91久久国产综合久久 | 九九热在线视频观看这里只有精品 | 日本视频中文字幕 | 日韩精品影院 | 国产精品一区二区三区免费 | 亚洲va中文字幕 | 国产精品久久久久一区二区三区 | 夜夜操操操操 | 欧美激情综合网 | 日韩高清中文字幕 | 天天干干干干 | 偷偷干夜夜拍 | 欧美a在线 | 99视频网站 | 成人免费视频在线观看 | 午夜三区 | 欧美亚洲国产激情 | 最近韩国日本免费高清观看 | 免费午夜电影 | 久久精品国产一区二区三区不卡 | 日韩中文字幕在线观看 | 一区二区日韩 | 日韩在线播放视频 | 精品天堂 | 在线观看日韩av |