偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

從5個維度總結(jié)Python數(shù)據(jù)結(jié)構(gòu)的關(guān)系,發(fā)現(xiàn)了這些技巧

新聞 前端
在python中,我們經(jīng)常用列表,字典等數(shù)據(jù)類型進(jìn)行數(shù)據(jù)存儲或者重新構(gòu)造一個序列,同時它們之間也有著一些關(guān)聯(lián)關(guān)系,接下來我們就對python中常用的幾種數(shù)據(jù)類型進(jìn)行一個整體性的梳理。

 在python中,我們經(jīng)常用列表,字典等數(shù)據(jù)類型進(jìn)行數(shù)據(jù)存儲或者重新構(gòu)造一個序列,同時它們之間也有著一些關(guān)聯(lián)關(guān)系,接下來我們就對python中常用的幾種數(shù)據(jù)類型進(jìn)行一個整體性的梳理。

收獲頗多,從5個維度總結(jié)python數(shù)據(jù)結(jié)構(gòu)的關(guān)系,發(fā)現(xiàn)了這些技巧

區(qū)別

相同點

  1. 都相當(dāng)于一個容器,有存放數(shù)據(jù)的功能
  2. 都可以用for ... in 進(jìn)行循環(huán)

不同點

  1. 序列存放的是不同類型的數(shù)據(jù),迭代器中存放的是算法。
  2. 序列是將數(shù)據(jù)提前存放好,獲取數(shù)據(jù)時通過循環(huán)或索引來取數(shù)據(jù) ;而迭代器不需要存放數(shù)據(jù),獲取數(shù)據(jù)時通過算法獲取下一個數(shù)據(jù) 。
  3. 序列中的每一個數(shù)據(jù)都要開辟內(nèi)存空間;而迭代器并不需要,它每次只需要通過算法計算出下一個值即可。從這個角度來看,如果進(jìn)行大數(shù)據(jù)量處理,使用迭代器更合適 。
  4. 序列可以通過索引或鍵名來獲取某一個值,而迭代器只能使用next()獲取下一個值。

變化趨勢

收獲頗多,從5個維度總結(jié)python數(shù)據(jù)結(jié)構(gòu)的關(guān)系,發(fā)現(xiàn)了這些技巧

從左到右,可以試圖找一些規(guī)律 。

  • 從對數(shù)據(jù)的排序來看,從左到右可以看出是無序的,有序的,有規(guī)則(也可以定義成有序的)
  • 從對數(shù)據(jù)的操作靈活度來看,左邊的操作性更加靈活,可以進(jìn)行增刪改查 ;右邊相對來說比較單一只能進(jìn)行查詢 (注意:定義后的字符串就只能進(jìn)行查詢,通過方法生成的字符串并不是原來的字符串了)。若想關(guān)注這些數(shù)據(jù)類型中的具體方法,可參考:python的5種數(shù)據(jù)結(jié)構(gòu),方法很多記不住嗎?全在這里了.
  • 從定義數(shù)據(jù)類型的符號來看,也是遵循漢字的大-中-小-引 來實現(xiàn)的,如字典|集合是大括號,列表是中括號,元組是小括號,字符串為雙引號或單引號。

數(shù)據(jù)類型間的相互轉(zhuǎn)化

以上不同的數(shù)據(jù)類型,也可以實現(xiàn)兩者之間的相互轉(zhuǎn)化,轉(zhuǎn)化時只需要通過調(diào)用對應(yīng)函數(shù)即可,如下圖

收獲頗多,從5個維度總結(jié)python數(shù)據(jù)結(jié)構(gòu)的關(guān)系,發(fā)現(xiàn)了這些技巧

下圖是每種數(shù)據(jù)類型間的相互轉(zhuǎn)化及具體實例。

收獲頗多,從5個維度總結(jié)python數(shù)據(jù)結(jié)構(gòu)的關(guān)系,發(fā)現(xiàn)了這些技巧

通過以上的表格可以看出,數(shù)據(jù)類型可以進(jìn)行相互轉(zhuǎn)化,總結(jié)有以下幾點:

  • 無論轉(zhuǎn)化為什么數(shù)據(jù)類型,都是通過關(guān)鍵字將具體的數(shù)據(jù)類型括起來,如元組轉(zhuǎn)化為列表:list(tuple)
  • 轉(zhuǎn)化為字典時需要注意的是,必須每兩個數(shù)據(jù)為一組,用括號括起來,這樣才能正確的生成字典的鍵值對,如果是一個元素轉(zhuǎn)化時會報錯 。
  • 轉(zhuǎn)化為字符串時需要注意的是,雖然通過str(data)可以轉(zhuǎn)化為字符串,但很多情況并非是我們想要的,我們更想要的是將序列中的元素組合起來變成一個字符串 ,如果想實現(xiàn)這樣的需求,就可以使用join()方法實現(xiàn)。

轉(zhuǎn)化為字典時必須要求是兩個元素組合成一個元組才能進(jìn)行轉(zhuǎn)化 。那為了簡便我們可以使用zip()將兩個序列組成一個新的字典更加方便。

  1. # 通過zip將兩個列表合并為一個序列,然后再轉(zhuǎn)化為字典。 
  2. lst1 = ['x','y','z']            #可以是一個列表,元組,集合 
  3. lst2 = [123,234,345]             
  4. print(dict(zip(lst1,lst2)))          
  5. #輸出: 
  6. {'x'345'y'234'z'123

通過str()進(jìn)行轉(zhuǎn)化后的數(shù)據(jù)雖然變成了字符串,但是我們更想的是把序列中的元素結(jié)合起來變?yōu)樽址?。那么可以通過join()方法將其內(nèi)的元素變?yōu)橄胍淖址?/p>

  1. #語法: 
  2.     "sep".join(seq)  
  3. #實例: 
  4.     x = "".join({'a':123,'b':345}) 
  5.     print("x:",x) 
  6.     y = ",".join(['java','python','c++']) 
  7.     print("y:",y) 
  8.     z = "_".join(("tuple","demo","01")) 
  9. #輸出: 
  10.     x: ab 
  11.     y: java,python,c++ 
  12.     z: tuple_demo_01 
  13. #說明: 
  14.     sep為分隔符,seq序列 

便捷式寫法-推導(dǎo)式

在以上的數(shù)據(jù)結(jié)構(gòu)中,部分?jǐn)?shù)據(jù)類型同樣支持推導(dǎo)式,推導(dǎo)式是可以將一個可迭代對象構(gòu)建成新的可迭代對象的表達(dá)式結(jié)構(gòu)體 。通過推導(dǎo)式可以快速實現(xiàn)出一個新的序列或生成器 ,也可以讓代碼更加優(yōu)雅和快捷 。

為了更加直觀,我們可以一張圖來總結(jié)不同數(shù)據(jù)類型所支持的推導(dǎo)式。我們只需要記住推導(dǎo)式的433.

收獲頗多,從5個維度總結(jié)python數(shù)據(jù)結(jié)構(gòu)的關(guān)系,發(fā)現(xiàn)了這些技巧

字典推導(dǎo)式

  1. #語法: 
  2.     {<operation_key:operation_value> for key,value in dict condition } 
  3. #實例: 
  4.     d = {'chinese'88'math'92'english'93'history'84
  5.     print("成績大于90分的科目:", {k: '優(yōu)秀' for k, v in d.items() if v >= 90}) 
  6. #輸出 
  7.     成績大于90分的科目: {'math''優(yōu)秀''english''優(yōu)秀'
  8. #說明: 
  9.     for循環(huán)后的表達(dá)式可以是條件表達(dá)式或者循環(huán)表達(dá)式,主要是進(jìn)行篩選或嵌套循環(huán) 
  10.     返回結(jié)果是一個根據(jù)表達(dá)式運(yùn)算后生成出來的新字典 。 

集合推導(dǎo)式:

  1. #語法: 
  2.     {<operation_key:x> for x in set condition } 
  3. #實例 
  4.     s = {x**2 for x in [123]} 
  5.     print("集合s:",s) 
  6. #輸出:  
  7.     集合s: {149

列表推導(dǎo)式

  1. #語法: 
  2.     [ operation(x) for x in list condition ] 
  3. #實例 
  4.     print([random.randint(1,10)+x for x in range(0,10if x % 2 == 0]) 
  5. #結(jié)果: 
  6.     [33141512
  7. #說明: 
  8.     #對列表推導(dǎo)式常使用的幾種用法 
  9.     用法1:[x for x in iterable ]                  #循環(huán)后直接打印 
  10.     用法2:[x for x in iterable if condition(x) ]  #對x的條件判斷 
  11.     用法3:[operation(x) for x iterable if condition(x)]  #對x條件判斷后,再對x進(jìn)行運(yùn)算 
  12.     用法4: [operation(x,y) for x in iterable for y in iterable1] #嵌套循環(huán),對x,y進(jìn)行運(yùn)算 

生成器推導(dǎo)式

  1. #語法: 
  2.     ( operation(x) for x in iterable condition ) 
  3. #實例 
  4.     print((random.randint(1,10)+x for x in range(0,10if x % 2 == 0)) 
  5. #結(jié)果: 
  6.     <generator object <genexpr> at 0x02FDC420
  7. #說明: 
  8.     新生成的生成器可以使用for循環(huán),也可以next()獲取其下一個值 

組合用法

以上數(shù)據(jù)結(jié)構(gòu)除了可以作為容器使用,也可以它們結(jié)合起來使用,以用作其它用途 。比如可以用作條件語句。為了直觀,我們先寫一個簡單的if語句。

  1. score = 92 
  2. if score >= 90
  3.     print('優(yōu)秀'
  4. else
  5.     print('良好'
  6. #輸出:優(yōu)秀 

接下來,我們就通過以下這三種方式來重新定義條件語句。

收獲頗多,從5個維度總結(jié)python數(shù)據(jù)結(jié)構(gòu)的關(guān)系,發(fā)現(xiàn)了這些技巧

第一種,使用()+[]來實現(xiàn)條件判斷

  1. #語法: 
  2.     (<return_false>, <return_true>)[condition_expression] 
  3. #實例: 
  4.     score = 92 
  5.     print(('良好','優(yōu)秀')[ score >= 90 ]) 
  6. #結(jié)果: 
  7.     優(yōu)秀 
  8. #說明: 
  9.     在[]中寫條件語句,在()中寫返回為真和返回為假的值。一定要注意順序,()在前,[]在后 

第二種,使用{}+[]來實現(xiàn)條件判斷

  1. #語法: 
  2.     {True: <return_true>, False: <return_false>}[<condition_expression>] 
  3. #實例: 
  4.     score = 92 
  5.     print({True:'優(yōu)秀',False:'良好'}[ score >= 90 ]) 
  6. #結(jié)果: 
  7.     優(yōu)秀 
  8. #說明: 
  9.     在[]中寫條件語句,在()中寫返回為真和返回為假的值,一定要注意順序 

第三種,對字符串進(jìn)行條件判斷 ,需要用到eval方法。

  1. #語法: 
  2.     eval("字符串判斷語句"
  3. #實例 
  4.     print('優(yōu)秀' if eval("score >= 90"else '良好'
  5. #結(jié)果 
  6.     優(yōu)秀 

 

責(zé)任編輯:張燕妮 來源: 今日頭條
相關(guān)推薦

2020-05-18 08:42:23

CSS背景圖像前端開發(fā)

2018-08-28 12:07:42

微信數(shù)據(jù)分析

2018-03-07 09:35:08

Python淘寶數(shù)據(jù)

2024-05-20 08:25:55

2021-10-15 06:22:07

勒索軟件攻擊數(shù)據(jù)泄露

2021-10-29 11:45:26

Python代碼Python 3.

2022-05-09 11:19:12

CSS函數(shù)開源

2019-09-25 09:00:56

iPhone 11拆解蘋果

2020-06-16 08:39:35

JavaScript圖像處理庫

2023-10-16 15:41:14

WebCSS

2021-12-29 19:20:41

數(shù)據(jù)GitHub服務(wù)器

2024-06-03 11:43:55

2020-08-04 08:48:34

數(shù)據(jù)彈屏技術(shù)

2021-01-26 11:16:12

漏洞網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2019-10-29 06:33:14

5G物聯(lián)網(wǎng)應(yīng)用物聯(lián)網(wǎng)

2021-05-07 09:03:27

算法模型技術(shù)

2021-06-02 08:00:57

WebAsyncTas項目異步

2020-11-05 11:10:43

程序員開發(fā)工具

2021-03-06 13:31:52

網(wǎng)絡(luò)釣魚惡意郵件攻擊

2025-05-19 10:04:48

點贊
收藏

51CTO技術(shù)棧公眾號