欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【跟著Head First學(xué)Python】3、結(jié)構(gòu)化數(shù)據(jù):處理結(jié)構(gòu)化數(shù)據(jù)

系統(tǒng) 1611 0

上一章我們介紹了python中的列表,本章介紹其余三種數(shù)據(jù)結(jié)構(gòu):字典、集合和元組。

1、字典

字典有兩個(gè)特點(diǎn):其一,字典是由大括號(hào){}包圍的;其二,字典的每一個(gè)元素的模式都是“鍵:值”,而不是“鍵=值”,兩個(gè)元素之間用逗號(hào),隔開。

注意,字典初始化的順序不會(huì)保持,在初始化后,再次查看字典時(shí),元素順序可能變化。

一般訪問字典的數(shù)據(jù)時(shí),使用中括號(hào)記法,中括號(hào)中是鍵,使用鍵來訪問其關(guān)聯(lián)的數(shù)據(jù)值。

python字典的底層是一個(gè)大小可變的散列表。

空字典的初始化就是一個(gè)空的大括號(hào)。

python中有+=1操作符,但是沒有++操作符。

當(dāng)利用for循環(huán)顯示字典時(shí),如果使用以下這種方式:

            
              vowels={'a':0,'e':0,'i':0,'o':0,'u':0}
for letter in vowels:
    print(letter)
            
          

那么其效果如下圖:

只顯示了鍵,而與鍵關(guān)聯(lián)的值并沒有顯示出來,這說明這種方式并不是想要的。這是因?yàn)椋胒or循環(huán)迭代處理一個(gè)字典時(shí),解釋器只處理字典的鍵,因此,要訪問鍵和其對(duì)應(yīng)的值,應(yīng)按如下方式:

            
              vowels={'a':0,'e':0,'i':0,'o':0,'u':0}
for letter in vowels:
    print(letter,':',vowels[letter])

            
          

其效果如下圖:

【跟著Head First學(xué)Python】3、結(jié)構(gòu)化數(shù)據(jù):處理結(jié)構(gòu)化數(shù)據(jù)_第1張圖片

還有另一種方式,不使用vowels[letter]這種方式,而是使用字典自帶的函數(shù)items,這一函數(shù)會(huì)返回一個(gè)對(duì)應(yīng)字典的鍵值對(duì)列表, 即一個(gè)n行2列的列表,然后用兩個(gè)變量保存每行的兩個(gè)元素即可。

如圖,函數(shù)返回的是一個(gè)元素為元組的列表。這樣,訪問鍵值對(duì)的for循環(huán)可以如下所示:

            
              vowels={'a':0,'e':0,'i':0,'o':0,'u':0}
for c,v in vowels.items():
    print(c,':',v)

            
          

其效果如下:

【跟著Head First學(xué)Python】3、結(jié)構(gòu)化數(shù)據(jù):處理結(jié)構(gòu)化數(shù)據(jù)_第2張圖片

可以利用sorted函數(shù),該函數(shù)會(huì)返回字典的一個(gè)有序版本,而不會(huì)改變?cè)瓉淼淖值涞捻樞颉R虼嗣看涡枰行蜉敵鰰r(shí),都要再次調(diào)用該函數(shù)。

注意,如果我們沒有對(duì)字典中的某個(gè)鍵初始化,即該鍵在字典中不存在,那么訪問該鍵對(duì)應(yīng)的值則會(huì)報(bào)錯(cuò)KeyError。因此在訪問某個(gè)鍵之前,要先判斷這個(gè)鍵在不在字典中,一般使用in。in可以返回True或False,注意T和F要大寫,只有大寫才能表示真與假,小寫的話就會(huì)被認(rèn)為是變量,而不是布爾值。其代碼如下:

            
              if 'banana' in fruits:
    fruits['banana']+=1
else
    fruits['banana']=1
            
          

也就是說,在字典fruits中,如果鍵banana不存在,那么會(huì)新建一個(gè)鍵,并設(shè)置值為1;如果存在,則其值加一。此代碼一般應(yīng)用于頻度計(jì)數(shù)。

我們也可以使用not in來代替上面的代碼,如下:

            
              if 'pears' not in fruits:
    fruits['pears']=0
fruits['pears']+=1
            
          

每次都會(huì)執(zhí)行值加一,但是在加一前要檢查鍵是否存在,若不存在,就初始化為0。

注意這里if-not in的兩行代碼,由于它太常見,因此字典中有一個(gè)函數(shù)setdefault代替該函數(shù),如下:

            
              fruits.setfault('pears',0)
fruits['pears']+=1
            
          

所以人還是夠懶的,四行變?nèi)性僮儍尚小etfault函數(shù)有兩個(gè)參數(shù),第一個(gè)是鍵,第二個(gè)是值。雖然它用于初始化,但是循環(huán)體中要有它,每次循環(huán)都要執(zhí)行一次。這樣就可以杜絕KeyError異常。

當(dāng)我們要存儲(chǔ)一個(gè)多行多列的表時(shí),多行兩列的字典不夠用了,因此要使用元素為字典的字典來儲(chǔ)存,也稱嵌套鏈表。

這種字典中,每個(gè)元素都是字典,元素字典會(huì)儲(chǔ)存一行的元素,外面的字典會(huì)儲(chǔ)存多行。當(dāng)訪問這種字典的一個(gè)元素時(shí),類似二維數(shù)組,像這樣:

            
              People['name']['job']
            
          

當(dāng)我們想要利用print輸出嵌套鏈表時(shí),總會(huì)發(fā)現(xiàn)輸出的很復(fù)雜,因此可以import一個(gè)pprint模塊,使用pprint函數(shù)輸出嵌套鏈表,會(huì)很美觀。但是注意一點(diǎn),二維數(shù)組的下標(biāo)也可先行再列,也可以先列再行,但是這里就只能先字典元素,再字典元素的字典元素了。

2、集合

集合的一大特性是無重復(fù)元素。對(duì)集合的查找操作要比對(duì)列表的查找快的多,因此集合是查找首選的數(shù)據(jù)結(jié)構(gòu)。

集合也是用大括號(hào){}包圍,與字典的不同之處是它的元素中沒有冒號(hào):。另外,集合也沒有順序可言。

集合的初始化有兩種方法,如下:
?

            
              vowels={'a','a','a','e','i','i','i','o','u','u'}
#或
vowels=set('aaaeiiouu')
            
          

前者是直接初始化,后者是利用set函數(shù)初始化。無論哪種初始化,最后剩下的元素就只有一個(gè),而不會(huì)報(bào)錯(cuò)。

集合主要有三個(gè)函數(shù):并集、交集、差集。

并集函數(shù):union,A.union(B)將集合A與B合并,并返回一個(gè)新的集合,而A、B不會(huì)變化。

差集函數(shù):difference,A.difference(B)返回一個(gè)集合,是A與B中,在A中存在而在B中不存在的元素。

交集函數(shù),intersection,A.intersection(B)返回一個(gè)集合,在A和B中共有的元素。

3、元組

元組是用()包圍的。在將元組初始化之后,就不能再將其改變。

注意只有一個(gè)對(duì)象的元組,若元組只有一個(gè)對(duì)象,那么在這個(gè)對(duì)象之后一定有一個(gè)逗號(hào),,否則編譯器會(huì)把這個(gè)元組錯(cuò)認(rèn)為是一個(gè)變量。

元組中的元素如果有列表,雖然不能修改元組元素,但是可以修改列表,這樣元組元素也會(huì)更新。

4、數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換

四種數(shù)據(jù)結(jié)構(gòu)還有字符串均可以互相轉(zhuǎn)換,代碼如下:

            
              num_list=[1,2,3]
num_dic={'first':1,'second':2,'third':3}
num_set={1,2,3}
num_tuple=(1,2,3)
num="123"
print("轉(zhuǎn)化為list")
print(list(num_dic))
print(list(num_dic.values()))
print(list(num_set))
print(list(num_tuple))
print(list(num))
print("轉(zhuǎn)化為set")
print(set(num_list))
print(set(num_dic))
print(set(num_dic.values()))
print(set(num_tuple))
print(set(num))
print("轉(zhuǎn)化為tuple")
print(tuple(num_list))
print(tuple(num_dic))
print(tuple(num_dic.values()))
print(tuple(num_set))
print(tuple(num))
print("轉(zhuǎn)化為dict")
print(dict(zip(num_list,num_list)))
print(dict(zip(num_set,num_set)))
print(dict(zip(num_tuple,num_tuple)))
print(dict(zip(num,num)))
print("轉(zhuǎn)化為str")
print(''.join(str(num_list)))
print(''.join(str(num_dic)))
print(''.join(str(num_dic.values())))
print(''.join(str(num_set)))
print(''.join(str(num_tuple)))
print("轉(zhuǎn)化為str,完美版")
print(''.join(str(i) for i in num_list))
print(' '.join(str(i) for i in num_dic))
print('  '.join(str(i) for i in num_dic.values()))
print('   '.join(str(i) for i in num_set))
print('    '.join(str(i) for i in num_tuple))
            
          

其效果如下:

【跟著Head First學(xué)Python】3、結(jié)構(gòu)化數(shù)據(jù):處理結(jié)構(gòu)化數(shù)據(jù)_第3張圖片

有以下幾點(diǎn)需要注意:

字典轉(zhuǎn)換成其他結(jié)構(gòu),如果沒有預(yù)先說明,那么就不管值,只轉(zhuǎn)換鍵;要想轉(zhuǎn)換值,那需要調(diào)用values方法。

其他結(jié)構(gòu)轉(zhuǎn)換為字典時(shí),只用zip不夠,因?yàn)閦ip返回的是一個(gè)迭代器,應(yīng)將這個(gè)迭代器作為dict的參數(shù),這樣返回的才是字典。

其他結(jié)構(gòu)轉(zhuǎn)換為字符串時(shí),使用join函數(shù),注意以下幾點(diǎn):

join函數(shù)前面的''是轉(zhuǎn)換成字符串之后各元素間的分隔符,可以自定義,如果沒有那就是一整串;

join函數(shù)要求參數(shù)中所有元素必須都是字符串類型,如果不是,需要用str函數(shù)轉(zhuǎn)換;

對(duì)list等直接用str轉(zhuǎn)換的后果就是,list返回的是一個(gè)列表,列表有[],那str會(huì)把[]也變成字符,這樣不太符合我們的要求;

為了在結(jié)果中不顯示[]等,可以用列表生成式,把每個(gè)元素分別變成str。

注意,list、dict、set、tuple屬于BIF,即內(nèi)置函數(shù),它們用于創(chuàng)建數(shù)據(jù)結(jié)構(gòu)。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: xxx 日本韩国 | 欧美久久久网站 | 古装三级在线观看 | 亚洲精品一区二区三区福利 | av毛片在线免费看 | 操操影视| 黑人性xxxⅹxxbbbbb | 一级片在线 | 无码日韩精品一区二区免费 | 欧美三级视频在线观看 | 一级一级毛片看看 | 午夜影院操 | 日韩成人性视频 | 最新日韩精品在线观看 | 亚洲精品乱码久久久久久9色 | 99久久久久国产精品免费 | 精品久久久久久久久久久久久久 | 国产精品观看在线亚洲人成网 | 欧美另类视频一区 | 99热人人| 亚洲欧美偷拍自拍 | 日本无卡码免费一区二区三区 | 五月婷婷导航 | 乳欲人妻办公室奶水在线电影国产 | 91久久国产露脸精品免费 | 久久精品国产亚洲麻豆 | 天天天天综合 | 久碰香蕉精品视频在线观看 | 国产午夜精品一区二区三区在线观看 | 精品国产一区二区三区性色av | 奇米影视四色7777 | 国产成人免费高清激情明星 | 久久一区二区明星换脸 | 亚洲蜜桃AV色情精品成人 | 日本高清视频www夜色资源网 | 国产一区二区不卡 | caoporn视频| 国产一区网址 | 亚洲日本中文字幕永久 | 男女激情啪啪 | 在线一区观看 |