欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
你知道Python迭代器和生成器的區別聯(lián)系嗎?五分鐘帶你叱咤江湖


迭代

1. 什么是迭代?

使用for循環(huán)遍歷取值的過(guò)程叫做迭代,比如:使用for循環(huán)遍歷列表獲取值的過(guò)程

2. 可迭代對象

使用for循環(huán)遍歷取值的對象叫做可迭代對象, 比如:列表、元組、字典、集合、range、字符串

3.如何判斷一個(gè)對象是否可以迭代

可以使用isinstance()判斷一個(gè)對象是否是可迭代對象

Python 迭代器

上面簡(jiǎn)單的介紹了一下迭代,迭代是 Python 最強大的功能之一,是訪(fǎng)問(wèn)集合元素的一種方式?,F在正式進(jìn)入主題:迭代器,迭代器是一個(gè)可以記住遍歷的位置的對象。

迭代器對象從集合的第一個(gè)元素開(kāi)始訪(fǎng)問(wèn),直到所有的元素被訪(fǎng)問(wèn)完結束。

迭代器只能往前不會(huì )后退。

迭代器有兩個(gè)基本的方法:iter() 和 next(),且字符串,列表或元組對象都可用于創(chuàng )建迭代器,迭代器對象可以使用常規 for 語(yǔ)句進(jìn)行遍歷,也可以使用 next() 函數來(lái)遍歷。

具體的實(shí)例:

iter()函數與next()函數

list、tuple等都是可迭代對象,我們可以通過(guò)iter()函數獲取這些可迭代對象的迭代器。然后我們可以對獲取到的迭代器不斷使用next()函數來(lái)獲取下一條數據。iter()函數實(shí)際上就是調用了可迭代對象的 __iter__ 方法。

注意,當我們已經(jīng)迭代完最后一個(gè)數據之后,再次調用next()函數會(huì )拋出StopIteration的異常,來(lái)告訴我們所有數據都已迭代完成,不能再執行next()函數了。

lsit 生成式(列表生成式)

1、創(chuàng )建 list 的方式

之前經(jīng)過(guò)我們的學(xué)習,都知道如何創(chuàng )建一個(gè) list ,可是有些情況,用賦值的形式創(chuàng )建一個(gè) list 太麻煩了,特別是有規律的 list ,一個(gè)一個(gè)的寫(xiě),一個(gè)一個(gè)賦值,太麻煩了。比如要生成一個(gè)有 30 個(gè)元素的 list ,里面的元素為 1 - 30 。我們可以這樣寫(xiě):

輸出的結果:

這個(gè)其實(shí)在之前也有提到過(guò):比如有個(gè)例子,打印九九乘法表,用這個(gè)方法其實(shí)就幾句代碼就可以了,可以參考小編上一篇文章:循環(huán)語(yǔ)句的運用

但是,如果用到 list 生成式,可以一句代碼就生成九九乘法表了。具體看代碼:

最后輸出的結果:

不過(guò),這里我們先要了解如何創(chuàng )建 list 生成式

2、list 生成式的創(chuàng )建

首先,lsit 生成式的語(yǔ)法為:

第一種語(yǔ)法:首先迭代 iterable 里所有內容,每一次迭代,都把 iterable 里相應內容放到iter_var 中,再在表達式中應用該 iter_var 的內容,最后用表達式的計算值生成一個(gè)列表。

第二種語(yǔ)法:加入了判斷語(yǔ)句,只有滿(mǎn)足條件的內容才把 iterable 里相應內容放到 iter_var 中,再在表達式中應用該 iter_var 的內容,最后用表達式的計算值生成一個(gè)列表。

其實(shí)不難理解的,因為是 list 生成式,因此肯定是用 [] 括起來(lái)的,然后里面的語(yǔ)句是把要生成的元素放在前面,后面加 for 循環(huán)語(yǔ)句或者 for 循環(huán)語(yǔ)句和判斷語(yǔ)句。

例子:

輸出的結果:

可以看到,就是把要生成的元素x * x放到前面,后面跟 for 循環(huán),就可以把 list 創(chuàng )建出來(lái)。那么 for 循環(huán)后面有 if 的形式呢?又該如何理解:

輸出的結果:

這個(gè)例子是為了求 1 到 10 中偶數的平方根,上面也說(shuō)到,x * x是要生成的元素,后面那部分其實(shí)就是在 for 循環(huán)中嵌套了一個(gè) if 判斷語(yǔ)句。

那么有了這個(gè)知識點(diǎn),我們也可以猜想出,for 循環(huán)里面也嵌套 for 循環(huán)。具體示例:

輸出的結果:

其實(shí)知道了 list 生成式是怎樣組合的,就不難理解這個(gè)東西了。因為 list 生成式只是把之前學(xué)習的知識點(diǎn)進(jìn)行了組合,換成了一種更簡(jiǎn)潔的寫(xiě)法而已。

生成器

利用迭代器,我們可以在每次迭代獲取數據(通過(guò)next()方法)時(shí)按照特定的規律進(jìn)行生成。但是我們在實(shí)現一個(gè)迭代器時(shí),關(guān)于當前迭代到的狀態(tài)需要我們自己記錄,進(jìn)而才能根據當前狀態(tài)生成下一個(gè)數據。為了達到記錄當前狀態(tài),并配合next()函數進(jìn)行迭代使用,我們可以采用更簡(jiǎn)便的語(yǔ)法,即生成器(generator)。生成器是一類(lèi)特殊的迭代器。

創(chuàng )建生成器的方法1

要創(chuàng )建一個(gè)生成器,有很多種方法。第一種?法很簡(jiǎn)單,只要把一個(gè)列表生成式的 [ ] 改成 ( )

創(chuàng )建 L 和 G 的區別僅在于最外層的 [ ] 和 ( ) , L 是一個(gè)列表,而 G 是一個(gè)生成器。我們可以直接打印出列表L的每一個(gè)元素,而對于生成器G,我們可以按照迭代器的使用方法來(lái)使用,即可以通過(guò)next()函數、for循環(huán)、list()等方法使用。

創(chuàng )建生成器的方法2

generator?常強大。如果推算的算法比較復雜,用類(lèi)似列表生成式的 for 循環(huán)無(wú)法實(shí)現的時(shí)候,還可以用函數來(lái)實(shí)現。 我們用著(zhù)名的斐波那契數列來(lái)舉例,回想我們在上一次?迭代器的實(shí)現方式:

注意,在用迭代器實(shí)現的方式中,我們要借助幾個(gè)變量(n、current、num1、num2)來(lái)保存迭代的狀態(tài)?,F在我們用生成器來(lái)實(shí)現一下。

迭代器和生成器綜合例子

因為迭代器和生成器基本是互通的,因此有些知識點(diǎn)需要綜合在一起

1、反向迭代

反向迭代,也是常有的需求了,比如從一開(kāi)始迭代的例子里,有個(gè)輸出 list 的元素,從 1 到 5 的

那么我們從 5 到 1 呢?這也很簡(jiǎn)單, Python 中有內置的函數 reversed()

方向迭代很簡(jiǎn)單,可是要注意一點(diǎn)就是:反向迭代僅僅當對象的大小可預先確定或者對象實(shí)現了 __reversed__() 的特殊方法時(shí)才能生效。 如果兩者都不符合,那你必須先將對象轉換為一個(gè)列表才行

其實(shí)很多時(shí)候我們可以通過(guò)在自定義類(lèi)上實(shí)現 __reversed__()方法來(lái)實(shí)現反向迭代。不過(guò)有些知識點(diǎn)在之前的篇節中還沒(méi)有提到,不過(guò)可以相應的看下,有編程基礎的,學(xué)完上面的知識點(diǎn)應該也能理解的。

輸出的結果是 1 到 30 然后 30 到 1 ,分別是順序打印和倒序打印

2、同時(shí)迭代多個(gè)序列

你想同時(shí)迭代多個(gè)序列,每次分別從一個(gè)序列中取一個(gè)元素。你遇到過(guò)這樣的需求嗎?

為了同時(shí)迭代多個(gè)序列,使用 zip() 函數,具體示例:

輸出的結果:

其實(shí) zip(a, b) 會(huì )生成一個(gè)可返回元組 (x, y) 的迭代器,其中 x 來(lái)自 a,y 來(lái)自 b。 一旦其中某個(gè)序列到底結尾,迭代宣告結束。 因此迭代長(cháng)度跟參數中最短序列長(cháng)度一致。注意理解這句話(huà)喔,也就是說(shuō)如果 a , b 的長(cháng)度不一致的話(huà),以最短的為標準,遍歷完后就結束。

利用 zip() 函數,我們還可把一個(gè) key 列表和一個(gè) value 列表生成一個(gè) dict (字典),如下:

輸出的結果:

這里提一下,zip()是可以接受多于兩個(gè)的序列的參數,不僅僅是兩個(gè)。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Python中的3個(gè)“黑魔法”與“騷操作”
Python進(jìn)階系列(一)
Python中生成器和迭代器的區別
Python3_迭代器和生成器
Python | 深入理解循環(huán)和迭代
Python基礎篇--迭代器,生成器和裝飾器
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久