Python專欄2

2021-03-02 郭老師統計小課堂
4 數據結構(二)

在介紹完元組和列表之後,我們接著介紹其他的數據結構。

4.1 字典

元組和列表有一個共同點:都是利用數字編號來訪問裡面的值。但如果我們想用其他的元素(比如字符串)來當作索引呢?這種情形也是很常見的,比如我們利用Python儲存電話號碼,我們肯定很想用名字來進行索引,訪問取值(電話號碼)。而字典可以解決這個問題。

字典(dictionary)是Python中唯一的內置映射類型。映射是指的可以通過名稱來訪問各個值的數據結構。字典可能是Python裡面最為重要的數據結構。下面我們來介紹關於字典的一些操作。

可以使用大括號來創建字典,用冒號分隔索引和值,用逗號分隔不同的索引和值:

In [1]: dict1 = {'a' : 'stat', 5 : [1,2,3,4]}
In [2]: dict1Out[2]: {'a': 'stat', 5: [1, 2, 3, 4]}
In [3]: type(dict1)Out[3]: dict

其中type函數用來表示數據的類型。

同時也可以使用dict函數創建字典:

In [4]: tuple1 = ('yang','li','wang')
In [5]: tuple2 = (100,99,98)
In [6]: dict2 = dict(zip(tuple1,tuple2))
In [7]: dict2Out[7]: {'yang': 100, 'li': 99, 'wang': 98}

需要注意的是,字典的索引通常是不可變的,即不可被更改,比如:整數,字符串,元組等。這被稱為「可哈希性」。如果用可變的數據(比如列表)作為索引,會引發錯誤:

In [8]: dict3 = {[1,2]:1}TypeError                                 Traceback (most recent call last)<ipython-input-8-d6261989d799> in <module>()----> 1 dict3 = {[1,2]:1}
TypeError: unhashable type: 'list'

可以使用hash函數檢測一個元素是不是可哈希的(可以被用作字典的索引):

In [9]: hash(1)Out[9]: 1
In [10]: hash('stat')Out[10]: -5413363681840078896
In [11]: hash([1,2])TypeError Traceback (most recent call last)<ipython-input-11-9ce67481a686> in <module>()----> 1 hash([1,2])
TypeError: unhashable type: 'list'

可以直接利用dict[]的方法進行操作,只不過方括號裡面輸入的是字典的索引,就可以不是數字了:

In [12]: dict1Out[12]: {'a': 'stat', 5: [1, 2, 3, 4]}
In [13]: dict1[7] = 'an integer'
In [14]: dict1Out[14]: {'a': 'stat', 5: [1, 2, 3, 4], 7: 'an integer'}
In [15]: dict1['a']Out[15]: 'stat'

同時,還可以用檢查列表和元組是否包含某個值的辦法,來檢查字典中是否含有某個鍵:

In [17]: 'a' in dict1Out[17]: True
In [18]: 'an integer' in dict1Out[18]: False

刪除元素可以使用del關鍵字以及pop函數刪除索引及其對應的元素:
In [19]: dict1[8] = (1,1)
In [20]: dict1[9] = (2,2)
In [21]: dict1Out[21]: {'a': 'stat', 5: [1, 2, 3, 4], 7: 'an integer', 8: (1, 1), 9: (2, 2)}
In [22]: del dict1[8]
In [23]: dict1Out[23]: {'a': 'stat', 5: [1, 2, 3, 4], 7: 'an integer', 9: (2, 2)}
In [24]: pop9 = dict1.pop(9)
In [25]: pop9Out[25]: (2, 2)
In [26]: dict1Out[26]: {'a': 'stat', 5: [1, 2, 3, 4], 7: 'an integer'}

在這裡我們在dict1裡面生成了索引為8和9的兩個元素,然後利用del刪除8對應的元素,再利用pop函數刪除了9對應的元素。

利用keys()函數可以輸出字典的索引,利用values()輸出字典的值,這兩種方法輸出的順序是一樣的。這兩個函數都是生成器,所以我們還是需要先轉化成別的數據結構,才可以看到結果。

In [27]: dict1Out[27]: {'a': 'stat', 5: [1, 2, 3, 4], 7: 'an integer'}
In [28]: dict1.keys()Out[28]: dict_keys(['a', 5, 7])
In [29]: type(dict1.keys())Out[29]: dict_keys
In [30]: list(dict1.keys())Out[30]: ['a', 5, 7]
In [31]: list(dict1.values())Out[31]: ['stat', [1, 2, 3, 4], 'an integer']

合併字典利用update()函數可以將一個字典與另一個字典合併:
In [32]: dict1Out[32]: {'a': 'stat', 5: [1, 2, 3, 4], 7: 'an integer'}
In [33]: dict2Out[33]: {'yang': 100, 'li': 99, 'wang': 98}
In [34]: dict1.update(dict2)
In [35]: dict1Out[35]:{'a': 'stat', 5: [1, 2, 3, 4], 7: 'an integer', 'yang': 100, 'li': 99, 'wang': 98}
In [36]: dict2Out[36]: {'yang': 100, 'li': 99, 'wang': 98}

可以看到,字典dict1發生了變化,而dict2並沒有變化。

4.2 集合

這裡的集合與數學上的集合類似,都是由無序的不可重複的元素組合起來的。和前面的數據結構不同的是,集合裡面沒有索引。下面介紹一些集合的操作:

使用大括號或者是set函數來生成集合:

In [37]: set1 = {1,2,3}
In [38]: set1Out[38]: {1, 2, 3}
In [39]: set2 = set([3,4,5,6])
In [40]: set2Out[40]: {3, 4, 5, 6}

需要注意的是,與字典類似,集合的元素通常是不可變的。所以如果要把列表作為一個元素放在集合裡面,必須要先轉換成元組:

In [42]: set3 = {[1,2,3,4,5]}TypeError                                 Traceback (most recent call last)<ipython-input-42-95e8c6514767> in <module>()----> 1 set3 = {[1,2,3,4,5]}
TypeError: unhashable type: 'list'
In [43]: set3 = {tuple([1,2,3,4,5])}
In [44]: set3Out[44]: {(1, 2, 3, 4, 5)}

Python支持很多的數學集合運算。下面介紹一些集合的運算。請參見下面的圖表:

集合運算

需要注意的是,通過函數以及替代語法都可以實現相同的功能,比如對於update函數:

In [63]: a = {1,2,3,4,5}
In [64]: b = {3,4,5,6,7,8}
In [65]: c = a
In [66]: cOut[66]: {1, 2, 3, 4, 5}
In [67]: a.update(b)
In [68]: aOut[68]: {1, 2, 3, 4, 5, 6, 7, 8}
In [69]: c |= b
In [70]: cOut[70]: {1, 2, 3, 4, 5, 6, 7, 8}

相關焦點

  • Python 2.x 字符編碼終極指南
    但僅了解這篇文章的內容,並不能幫我們在日常編程中躲過一些字符編碼相關的坑,Stackoverflow 上就有大量編碼相關的問題,比如 1,2,3。本文首先嘗試對編碼、解碼進行一個宏觀、直觀的解讀,然後詳細來解釋 python2 中的str和unicode,並對常見的UnicodeEncodeError 和 UnicodeDecodeError 異常進行剖析。
  • Python3 與 C# 基礎語法對比(String專欄)
    2.字符串拼接+拼接輸出方式python:python在這方面簡化了)3.2 python切片語法:[start_index:end_index:step] (end_index取不到)eg:str[2:-1] 取下標為2~到倒數第二個元素(end_index取不到)# eg:str[1:6:2] 隔著取~str[1]、str[3]、str[5](案例會詳細說)# eg:str[::-1] 逆向輸出(案例會詳細說,)
  • Python3與Python2 區別
    print(type(3 / 2))2、python3廢棄long類型,統一使用int類型a=111111111111print(type(a))#python2: <type 'long'>#python3: <class 'int'>3、python3 round函數返回int類型,而python2
  • 《小灰教你零基礎學python》-Python入門語言
    程式語言有很多,咱們就學簡單強大的python即可。三、python程式語言介紹Python是荷蘭人吉多·范羅蘇姆(Guido van Rossum)在1989年聖誕節期間開發的一門解釋性的腳本語言,什麼是解釋性的語言,大家可以參照百度百科(
  • Python 2.x 與 Python 3.x 的區別
    Python 中的除法有兩個運算符,/ 和 // 首先來說下 / 除法:在 python 2.x 中 / 除法就跟我們熟悉的大多數語言,比如 Java、C 差不多,整數相除的結果是一個整數,把小數部分完全忽略掉,浮點數除法會保留小數點的部分得到一個浮點數的結果。在 python3.x 中 / 除法不再這麼做了,對於整數之間的相除,結果也會是浮點數。
  • Python時間運算的詳細機制初探討
    劉布丁,Python中文社區專欄作者,目前工作職位是Python後臺工程師,擅長Python系統監控。
  • Python 2 與 Python 3 的區別
    ,3/2的結果是整數,在Python 3中,結果則是浮點數Python 2print '3 / 2 =', 3 / 2print '3 / 2.0 =', 3 / 2.0輸出3 / 2 = 1 3 / 2.0 = 1.5Python 3print(
  • 【Python基礎】python使用PyPDF2和pdfplumber操作pdf
    1、PyPDF2和pdfplumber庫介紹PyPDF2官網:PyPDF2官網 ,可以更好的讀取、寫入、分割、合併PDF文件;pdfplumber官網:pdfplumber官網,可以更好地讀取PDF文件內容和提取PDF中的表格;這兩個庫不屬於python標準庫,都需要單獨安裝;2、python提取PDF文字內容1)利用pdfplumber提取文字
  • Python 四大基本語法
    = Book(1,'python入門書',100)ml_intro_book = Book(2,'機器學習入門書',200)# 求兩本書的總銷量sales_cnt = python_intro_book + ml_intro_bookprint(sales_cnt) # 300如下是代碼執行結果的演示圖
  • 3本零基礎學習Python的書籍推薦
    一直有同學希望我推薦基本學習python的書籍,今天先推薦3本吧。1、《簡明Python教程》
  • 【小喵科技】MicroPython教程:python基礎篇2
    前面我介紹了python的數組,或者有些書稱之為列表。我們先用手上幾個新工具解剖一下數組:a = [1, 2, 3, 4, 5]print(a)print(type(a))print(dir(a))輸出為:[1, 2, 3, 4, 5]<class 'list'>['append', 'clear', 'copy', 'count', 'extend
  • Python函數的基本特徵詳解
    這說明了一點,在python中函數也是對象。python的函數使用還是非常簡單的,我們再舉一個例子:主要描述了兩個方面:def定義(即函數的創建)和函數的調用(表達式告訴python去運行函數主體)def func(x,y):    return x * yprint(func(2,4))8結合前面的例子我們可以看到,在例子中,參數x被賦值為
  • 【綜述專欄】損失函數理解匯總,結合PyTorch和TensorFlow2
    為此,我們精選國內外優秀的綜述文章,開闢「綜述專欄」,敬請關注。地址:https://www.zhihu.com/people/dengbocong本文打算討論在深度學習中常用的十餘種損失函數(含變種),結合PyTorch和TensorFlow2對其概念、公式及用途進行闡述,希望能達到看過的夥伴對各種損失函數有個大致的了解以及使用。
  • 機器學習如何從Python 2遷移到Python 3
    ,是因為字符串輸入已廣泛應用在 python 數據棧中。( https://eev.ee/blog/2016/07/31/python-faq-how-do-i-port-to-python-3/)Python 機器學習和 python 數據科學領域所會碰到的主要問題這些課程的作者首先要花點時間解釋 python 中什麼是迭代器,為什麼它不能像字符串那樣被分片/級聯/相乘/二次迭代(以及如何處理它)。
  • python實戰演練2:python可執行文件運行不成功怎麼辦
    要談到這個話題,我們首先對如何將python文件製作成exe文件做簡單介紹:眾所周知,python語言作為一種腳本語言,本身是無法自己轉化成可執行文件的,需要藉助第三方工具才能將其轉化為可執行文件(.exe文件)。
  • 白話 Python 的函數式編程
    ,如果我調用 multiply_2() 這個函數多次,那麼每次得到的結果都不一樣。def multiply_2_pure(l): new_list = []  for item in l: new_list.append(item * 2)  return new_list函數式編程的優點主要在於其 pure function 和不可變的特性使得程序更加健壯,易於 debug 和測試,
  • python 3.x 與2.x的區別
    現在不單單是要學python,還在考慮用它做點什麼,這些等後續再說吧,因為看的是python2.x的書籍。用的是python 3.7.所以先把兩者的區別記錄一下,僅限於基礎。python3.x 與2.x的區別1.printprint語句沒有了,取而代之的是print()函數。
  • python運算符優先級,加減乘除只是基礎,學習python第2天
    在計算機編程中少不了運算,而python運算符有哪些呢?python運算符優先級順序又是怎麼樣的?就像數學一樣,加減乘除只是基礎,了解python運算符才能解決實際性的問題。python運算符及其優先級python運算符及其優先級python程序中支持多種運算符,常見的有加減乘除、賦值運算符、算術運算符、邏輯運算符
  • [Python第2課]print介紹
    和linux教程放在一起,每天兩篇文章,讓你不但掌握python,還要學會linux的相關技能。       print,中文意思是列印,在python裡它不是往紙上列印,而是列印在命令行,或者叫終端、控制臺裡面,所以我通常叫他輸出命令。
  • uiautomator2+python自動化測試1-環境準備
    我們希望測試能夠用Python編寫,能夠在電腦上運行的時候就控制手機,於是就有了python-uiautomator,後來又有了python-uiautomator2,詳情查看github地址https://github.com/openatx/uiautomator2環境準備python  3.6uiautomator2           0.3.3uiautomator2