国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python標(biāo)準(zhǔn)類型的比較原則:字典VS列表(元組)

littleGrow / 986人閱讀

摘要:完全匹配到此為止即每個(gè)字典有相同的長度相同的鍵每個(gè)鍵也對應(yīng)相同的值則字典完全匹配返回值。在這種情況下,長的序列被認(rèn)為是較大的。否則,通過類型名字的字母順序進(jìn)行比較??偨Y(jié)列表元組的比較原則先大小后長短。

昨天看《核心編程》發(fā)現(xiàn)了一個(gè)鮮為人知的知識(shí)點(diǎn),在Python中的字典比較和列表比較的策略竟然不相同,下面做具體分析。

字典比較原則 例子
>>> dict1 = {}
>>> dict2 = {"host":"earth","port":80}
>>> cmp(dict1, dict2)
-1
>>> dict1["host"] = "earth"
>>> cmp(dict1,dict2)
-1

第一個(gè)比較中,dict1比dict2小,因?yàn)閐ict2有更多的元素(2個(gè)vs.0個(gè))。在向dict1添加一個(gè)元素后,dict1仍然比dict2小(2個(gè)vs.1個(gè)),雖然添加的元素在dict2中也存在。

>>> dict1["port"] = 8080
>>> cmp(dict1, dict2)
1
>>> dict1["port"] = 80
>>> cmp(dict1, dict2)
0

在向dict1添加第二個(gè)元素后,兩個(gè)字典的長度相同,所以用鍵比較大小。這時(shí)鍵相等,則通過它們的值比較大小。鍵"host"的值相同,對于鍵"port",dict1中值比dict2中的值大(8080 vs. 80)。當(dāng)把dict2中"port"的值設(shè)成和dict1中的值一樣,那么兩個(gè)字典相等:它們有相同的大小、相同的鍵、相同的值,所以cmp()返回值是0。

>>> dict1["port"] = "tcp"
>>> cmp(dict1, dict2)
1
>>> dic2["port"] = "udp"
>>> cmp(dict1,dict2)
-1

當(dāng)向兩個(gè)字典中的仍和一個(gè)添加新元素時(shí),這個(gè)字典馬上會(huì)成為大的那個(gè)字典,就像例子中的dict1一樣。向dict2添加鍵-值對后,因?yàn)閮蓚€(gè)字典的長度又相等了,會(huì)繼續(xù)比較它們的鍵和值。

>>> cdict = {"fruits":1}
>>> ddict = {"fruits":1}
>>> cmp(cdict,ddict)
0
>>> cdict["oranges"] = 0
>>> ddict["apples"] = 0
>>> cmp(cdict, ddict)
14

上面的例子表明cmp()可以返回除-1、0、1外的其他值。

字典比較總結(jié)

字典比較的算法按照以下順序進(jìn)行:
(1)比較字典長度
如果字典的長度不同,那么用 cmp(dict1, dict2) 比較大小時(shí),如果字典 dict1 比 dict2 長,cmp()返回正值,如果 dict2 比 dict1 長,則返回負(fù)值。也就是說,字典中的鍵的個(gè)數(shù)越多,這個(gè)字典就越大,即:
len(dict1) > len(dict2) ==> dict1 > dict2
(2)比較字典的鍵
如果兩個(gè)字典的長度相同,那就按字典的鍵比較;鍵比較的順序和 keys()方法返回鍵的順序相同。 (注意: 相同的鍵會(huì)映射到哈希表的同一位置,這保證了對字典鍵的檢查的一致性。) 這時(shí),如果兩個(gè)字典的鍵不匹配時(shí),對這兩個(gè)(不匹配的鍵)直接進(jìn)行比較。當(dāng) dict1 中第一個(gè)不同的鍵大于 dict2 中第一個(gè)不同的鍵,cmp()會(huì)返回正值。
(3)比較字典的值
如果兩個(gè)字典的長度相同而且它們的鍵也完全匹配,則用字典中每個(gè)相同的鍵所對應(yīng)的值進(jìn)行比較。一旦出現(xiàn)不匹配的值,就對這兩個(gè)值進(jìn)行直接比較。若 dict1 比 dict2 中相同的鍵所對應(yīng)的值大,cmp()會(huì)返回正值。
(4)完全匹配
到此為止,即,每個(gè)字典有相同的長度、相同的鍵、每個(gè)鍵也對應(yīng)相同的值,則字典完全匹配,返回 0 值。

列表比較原則 例子
>>> list1,list2 = [123,"xyz"],[456,"abc"]
>>> cmp(list1, list2)
-1
>>>
>>> cmp(list2, list1)
1
>>> list3 = list2 + [789]
>>> list3
[456,"abc",789]
>>>
>>> cmp(list2,list3)
-1

當(dāng)我們比較list1和list2時(shí),list1和list2逐項(xiàng)比較。第一個(gè)比較操作發(fā)生在兩個(gè)列表的第一個(gè)元素之間,比如說,123與456比較,因?yàn)?23<456,所以list1被認(rèn)為小于list2
如果比較的值相等,那么兩個(gè)序列的下一個(gè)值繼續(xù)比較,知道不相等的情況出現(xiàn),或者到達(dá)較短的一個(gè)序列的末尾。在這種情況下,長的序列被認(rèn)為是較大的。這就是為什么上面list2元組類型的比較也是用這種算法。

列表比較總結(jié)

列表比較的算法按照以下順序進(jìn)行:
(1)對兩個(gè)列表的元組進(jìn)行比較
(2)如果比較的元素是同類型的,則比較其值,返回結(jié)果。
(3)如果兩個(gè)元素不是同一種類型,則檢查他們是否是數(shù)字。

a.如果是數(shù)字,執(zhí)行必要的數(shù)字強(qiáng)制類型轉(zhuǎn)換,然后比較。
b.如果有一方的元素是數(shù)字,則另一方的元素“大”(數(shù)字是“最小的”)。
c.否則,通過類型名字的字母順序進(jìn)行比較。

(4)如果有一個(gè)列表首先到達(dá)末尾,則另一個(gè)長一點(diǎn)的列表“大”。
(5)如果我們用盡了兩個(gè)列表的元素而且所有的元素都是相等的,那么結(jié)果就是個(gè)平局,就是說返回一個(gè)0。

總結(jié)

列表(元組)的比較原則:先大小后長短。
字典的比較原則:先長短,再鍵,再值。

參考來源

《Python核心編程(第二版)》

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/45507.html

相關(guān)文章

  • 對比學(xué)習(xí):Golang VS Python3

    摘要:和都是目前在各自領(lǐng)域最流行的開發(fā)語言之一。在機(jī)器學(xué)習(xí)數(shù)據(jù)分析領(lǐng)域成為必學(xué)語言。 showImg(https://segmentfault.com/img/remote/1460000019167290); Golang和Python都是目前在各自領(lǐng)域最流行的開發(fā)語言之一。 Golang其高效而又友好的語法,贏得了很多后端開發(fā)人員的青睞,最適用于高并發(fā)網(wǎng)絡(luò)編程的語言之一。 Python不...

    Jason 評論0 收藏0
  • 對比學(xué)習(xí):Golang VS Python3

    摘要:在機(jī)器學(xué)習(xí)數(shù)據(jù)分析領(lǐng)域成為必學(xué)語言。不定長參數(shù),支持不定長參數(shù),用定義參數(shù)名,調(diào)用時(shí)多個(gè)參數(shù)將作為一個(gè)元祖?zhèn)鬟f到函數(shù)內(nèi)返回函數(shù)結(jié)果。showImg(https://user-gold-cdn.xitu.io/2019/5/13/16ab0b937e7329d4); Golang和Python都是目前在各自領(lǐng)域最流行的開發(fā)語言之一。 Golang其高效而又友好的語法,贏得了很多后端開發(fā)人員的青...

    劉東 評論0 收藏0
  • python3學(xué)習(xí)筆記(2)----python數(shù)據(jù)類型

    摘要:的基本數(shù)據(jù)類型中的變量不需要聲明。在里,只有一種整數(shù)類型,表示為長整型,沒有中的。字符串的截取的語法格式如下變量頭下標(biāo)尾下標(biāo)索引值以為開始值,為從末尾的開始位置。列表列表是中使用最頻繁的數(shù)據(jù)類型。注意構(gòu)造包含或個(gè)元素的元組的特殊語法規(guī)則。 1、python3的基本數(shù)據(jù)類型 Python 中的變量不需要聲明。每個(gè)變量在使用前都必須賦值,變量賦值以后該變量才會(huì)被創(chuàng)建。在 Python 中,...

    陸斌 評論0 收藏0
  • Python3基礎(chǔ)數(shù)據(jù)類型

    摘要:列表列表是中使用最頻繁的數(shù)據(jù)類型。列表可以完成大多數(shù)集合類的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。注意構(gòu)造包含或個(gè)元素的元組的特殊語法規(guī)則。基本功能是進(jìn)行成員關(guān)系測試和刪除重復(fù)元素。以下幾個(gè)內(nèi)置的函數(shù)可以執(zhí)行數(shù)據(jù)類型之間的轉(zhuǎn)換。 一、說明 Python 中的變量不需要聲明。每個(gè)變量在使用前都必須賦值,變量賦值以后該變量才會(huì)被創(chuàng)建。在 Python 中,變量就是變量,它沒有類型,我們所說的類型是變量所指的內(nèi)存中...

    Rindia 評論0 收藏0
  • Python3中六種標(biāo)準(zhǔn)數(shù)據(jù)類型簡單說明和理解

    摘要:作者心葉時(shí)間中的變量不需要聲明。中有六個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型數(shù)字字符串列表元組集合字典。字符串格式化我叫今年歲心葉我叫心葉今年歲如上所示,字符串支持格式化,當(dāng)然,出來上面用到的和以外,還有一些別的,具體看文檔是不是感覺有點(diǎn)語言的味道。 作者:心葉時(shí)間:2018-04-21 09:28 Python 中的變量不需要聲明。每個(gè)變量在使用前都必須賦值,變量賦值以后該變量才會(huì)被創(chuàng)建。 Python3...

    Cheng_Gang 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<