最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Python基礎(chǔ):從迭代器操作看整體和局部(一)

2023-05-06 00:06 作者:扣丁船  | 我要投稿

迭代器,簡單來說就是可以一個(gè)可以裝很多東西的容器,并且這些東西可以逐個(gè)拿出來。在python中典型的就是list列表。

如平常使用的眾多工具一樣,python中也針對數(shù)組(迭代器)聚合運(yùn)算給出了標(biāo)準(zhǔn)的函數(shù)(或稱API),常見的有求和、求個(gè)數(shù)、求最大值,求最小值,均值等。

簡單計(jì)算

例如有一個(gè)由1,2,3,4構(gòu)成的數(shù)組,針對其做以上操作如下所示。

列表如下:

求和:

求個(gè)數(shù):

也就是求得該列表的長度。

求均值:

內(nèi)置函數(shù)中沒有直接給出,但是有了上面兩個(gè)可以求出的條件,此問題也不是問題。

求最大值:

求最小值:

這些簡單的計(jì)算,基本沒有難度,如果要總結(jié)下就是:函數(shù)中直接傳入迭代器,返回想要的結(jié)果。

但其實(shí)python中封裝的迭代器操作函數(shù),有比這高級(jí)的用法。


復(fù)雜計(jì)算

所說高級(jí)用法,也就是說,在這些元素不是1,2,3,4這些簡單的數(shù)字元素時(shí),而是dict字典、子列表這些更具完整信息的元素時(shí),怎么根據(jù)這些完整元素的部分特征,取出某個(gè)元素來。比如有以下一個(gè)字典元素構(gòu)成的數(shù)組:

如果想要根據(jù)這些字典局部特征count進(jìn)行對比,取得該局部最大值對應(yīng)的整體元素(字典)。

python在max函數(shù)中的另外一個(gè)參數(shù)key就可以起作用了,本質(zhì)上傳入的是一個(gè)函數(shù),簡單來講,就像一個(gè)回調(diào)函數(shù)一樣,被傳到max函數(shù)中,告訴max這個(gè)函數(shù),需要用哪個(gè)指標(biāo)來進(jìn)行比較。

當(dāng)然這個(gè)指標(biāo)可以直接被指定為比如上面的count,當(dāng)然也可以再被加工算一下得到的結(jié)果,比如讓這個(gè)count加1或者其他的計(jì)算,每個(gè)元素的count都按照這個(gè)規(guī)則計(jì)算一下之后比較,該指標(biāo)最大,那么就將這個(gè)對應(yīng)的元素返回。注意:不是返回這個(gè)元素的局部特征值(比如count)而是完整的元素。也就是這里的字典dict,比如{"name": "Tom", "count": 5, "sub": {"count": 2}},。

示例:

因?yàn)樗性刂衏ount最大的是第一條,所以比較之后,返回第一個(gè)字典。

既然可以取某個(gè)局部特征值,上面的每一個(gè)字典,還有一個(gè)嵌套字典sub,這個(gè)里面也有一個(gè)count,那它當(dāng)然也應(yīng)該可以用來作比較。

比較列表中的每個(gè)字典,取出字典中的sub key值,count值依次為2,1,4,5,3.

子字典值比較

很顯然第4個(gè)元素的該值是最大的。即

上面的例子中地迭代器的元素是字典,當(dāng)然還可以是其他的類型,比如子數(shù)組,更一般的就是一個(gè)python對象,包括自定義的一些類型。


元素為子列表

以下是一個(gè)元素為列表的列表(迭代器)。

還是以求max為例,比如要求針對每個(gè)子列表的第二個(gè)元素為標(biāo)準(zhǔn),找出該特征值最大值對應(yīng)的元素。

直觀比較可知道答案。

lambda x: x[1]是一個(gè)匿名函數(shù),這里函數(shù)參數(shù)是x, 輸出是冒號(hào)后面的表達(dá)式x[1], 比如輸入的x為[1,4,?2], 那么函數(shù)返回的結(jié)果為x[1] = 4。

前面講到,這個(gè)匿名函數(shù)整體作為一個(gè)回調(diào)函數(shù)傳入max中,這個(gè)處理機(jī)制可以理解為以下的過程。

1、遍歷arr1中的每個(gè)元素;

2、將當(dāng)前元素作為入?yún)魅肽涿瘮?shù);

3、匿名函數(shù)輸出結(jié)果,放入一個(gè)新的迭代器,順序還是元素保持一致;

4、找出新迭代器最大值,為5,并記錄其索引為3.

5、帶著找出的索引3取到原迭代器中的元素為[3,5,1].


元素為自定義類型

以下是一個(gè)自定義的類:

通過實(shí)例化該類,組成一個(gè)新的列表arr:

類比以上操作,找出屬性count最大對應(yīng)的實(shí)例是哪個(gè)。


總結(jié):

1、需求場景:在一個(gè)迭代器中,需要根據(jù)元素的局部特征,比如字典的某個(gè)key或者對象的某個(gè)屬性,根據(jù)某個(gè)規(guī)則,選擇對應(yīng)的元素;

2、前提條件:迭代器中的所有元素,需要結(jié)構(gòu)一致,不能缺失作為規(guī)則判斷依據(jù)的局部特征;

3、想法:這里給人的感覺是,一個(gè)局部的特征決定了整個(gè)的狀態(tài),比如學(xué)生時(shí)代考試,按某個(gè)科目排序,可以選出一個(gè)第一名,比如數(shù)學(xué),選出的是這個(gè)人,而不是這個(gè)分?jǐn)?shù)本身;按不同的維度又會(huì)選擇不同的個(gè)體出來;在某個(gè)領(lǐng)域,某個(gè)個(gè)人特質(zhì)就決定了某個(gè)人的高度。



Python基礎(chǔ):從迭代器操作看整體和局部(一)的評論 (共 條)

分享到微博請遵守國家法律
利辛县| 乌兰浩特市| 浏阳市| 彰化市| 牡丹江市| 柯坪县| 远安县| 栖霞市| 和林格尔县| 大同市| 潜山县| 张家口市| 石泉县| 都匀市| 江西省| 淮北市| 安宁市| 曲麻莱县| 井冈山市| 万载县| 金坛市| 广州市| 临汾市| 曲松县| 新和县| 衡水市| 承德市| 阳高县| 新建县| 鞍山市| 富宁县| 建宁县| 湘西| 丰台区| 任丘市| 昌都县| 娄底市| 马公市| 江孜县| 临桂县| 赤城县|