Python 序列
目? ?錄
Python 序列簡介
Python 序列圖表
列表與列表推導式
列表的創建與刪除
創建列表
刪除列表
列表常用方法
(1)append()、insert()、extend()
(2)pop()、remove()、clear()
(3)count()、index()
(4)sort()、reverse()
(5)內置函數對列表的操作
內置函數map()
reduce()
內置函數 filter()
列表推導式
切片
元組
生成器推導式
字典
字典創建、元素添加、修改與刪除
Python 序列簡介
- Python序列類似于其他語言中的數組,但功能要強大很多。
- Python中常用的序列結構有列表、元組、字符串,字典、集合以及range等對象也支持很多類似的操作。
- 列表、元組、字符串支持雙向索引,第一個元素下標為0,第二個元素下標為1,以此類推;最后一個元素下標為-1,倒數第二個元素下標為-2,以此類推。
Python 序列圖表
| ? | 列表 | 元組 | 字典 | 集合 |
| 類型名稱 | list | tuple | dict | set |
| 定界符 | 方括號[] | 圓括號() | 大括號{} | 大括號{} |
| 是否可變 | 是 | 否 | 是 | 是 |
| 是否有序 | 是 | 是 | 否 | 否 |
| 是否支持下標 | 是(使用序號作為下標) | 是(使用序號作為下標) | 是(使用“鍵”作為下標) | 否 |
| 元素分隔符 | 逗號 | 逗號 | 逗號 | 逗號 |
| 對元素形式的要求 | 無 | 無 | 鍵:值 | 必須可哈希 |
| 對元素值的要求 | 無 | 無 | “鍵”必須可哈希 | 必須可哈希 |
| 元素是否可重復 | 是 | 是 | “鍵”不允許重復,“值”可以重復 | 否 |
| 元素查找速度 | 非常慢 | 很慢 | 非常快 | 非常快 |
| 新增和刪除元素速度 | 尾部操作快 其他位置慢 | 不允許 | 快 | 快 |
列表與列表推導式
- 列表是Python中內置有序、可變序列,列表的所有元素放在一對中括號“[]”中,并使用逗號分隔開;
- 當列表元素增加或刪除時,列表對象自動進行擴展或收縮內存,保證元素之間沒有縫隙;
- 在Python中,一個列表中的數據類型可以各不相同,可以同時分別為整數、實數、字符串等基本類型,甚至是列表、元組、字典、集合以及其他自定義類型的對象。
[10, 20, 30, 40]
['crunchy frog', 'ram bladder', 'lark vomit']
['spam', 0, 5, [10, 20]]
[['file1', 200,7], ['file2', 260,9]]
- 小提示:Python采用的是基于值的內存管理模式,Python變量不直接存儲值,而是存儲值的引用,Python列表中元素也是存儲值的引用,所以列表中各元素可以是不同類型的數據。【不是直接存儲數值,存儲的是:“引用”。】
列表的創建與刪除
創建列表
創建列表之后,可以使用整數作為下標來訪問其中的元素,其中0表示第1個元素,1表示第2個元素,2表示第3個元素,以此類推;列表還支持使用負整數作為下標,其中-1表示最后1個元素,-2表示倒數第2個元素,-3表示倒數第3個元素,以此類推。
刪除列表
當一個列表不再使用時,可以使用del命令將其刪除,這一點適用于所有類型的Python對象。另外,也可以使用del命令刪除列表、字典等可變序列中的部分元素,而不能刪除元組、字符串等不可變序列中的部分元素。
??
拓展知識:垃圾回收機制。一般來說,使用del刪除對象之后Python會在恰當的時機調用垃圾回收機制來釋放內存,我們也可以在必要的時候導入Python標準庫gc之后調用gc.collect()函數立刻啟動垃圾回收機制來釋放內存。
列表常用方法
| 方法 | 說明 |
| lst.append(x) | 將元素x添加至列表lst尾部 |
| lst.extend(L) | 將列表L中所有元素添加至列表lst尾部 |
| lst.insert(index, x) | 在列表lst指定位置index處添加元素x,該位置后面的所有元素后移一個位置 |
| lst.remove(x) | 在列表lst中刪除首次出現的指定元素,該元素之后的所有元素前移一個位置 |
| lst.pop([index]) | 刪除并返回列表lst中下標為index(默認為-1)的元素 |
| lst.clear() | 刪除列表lst中所有元素,但保留列表對象 |
| lst.index(x) | 返回列表lst中第一個值為x的元素的下標,若不存在值為x的元素則拋出異常 |
| lst.count(x) | 返回指定元素x在列表lst中的出現次數 |
| lst.reverse() | 對列表lst所有元素進行逆序 |
| lst.sort(key=None, reverse=False) | 對列表lst中的元素進行排序,key用來指定排序依據,reverse決定升序(False)還是降序(True) |
| lst.copy() | 返回列表lst的淺復制 |
(1)append()、insert()、extend()
- append()?????用于向列表尾部追加一個元素。
- insert()????????用于向列表任意指定位置插入一個元素。
- extend()??????用于將另一個列表中的所有元素追加至當前列表的尾部。
- 這3個方法,都屬于原地操作,不影響列表對象在內存中的起始地址。
- 運算符+和*也可以實現列表增加元素的目的,但這兩個運算符不屬于原地操作,而是返回新列表。
(2)pop()、remove()、clear()
-
pop()用于刪除并返回指定位置(默認是最后一個)上的元素。
-
remove()用于刪除列表中第一個值與指定值相等的元素。
-
clear()用于清空列表。
-
這3個方法屬于原地操作,不影響列表對象的內存地址。使用del命令刪除列表中指定位置的元素,屬于原地操作。
- 小提示:在列表中間位置插入或刪除元素時,會影響該位置后面所有元素的下標,要盡量避免在列表中間位置進行元素的插入和刪除操作。?
(3)count()、index()
- 列表方法count()用于返回列表中指定元素出現的次數,index()用于返回指定元素在列表中首次出現的位置,如果該元素不在列表中則拋出異常。
- 除此之外,成員測試運算符in也可以測試列表中是否存在某個元素。
(4)sort()、reverse()
- 列表對象的sort()方法用于按照指定的規則對所有元素進行排序,默認規則是直接比較元素大小;reverse()方法用于將列表所有元素逆序排列。
??
(5)內置函數對列表的操作
- max()、min()函數:用于返回列表中所有元素的最大值和最小值。
- sum()函數:用于返回數值型列表中所有元素之和。
- len()函數:用于返回列表中元素個數。
- zip()函數:用于將多個列表中元素重新組合為元組,并返回包含這些元組的zip對象。
- enumerate()函數:返回包含若干下標和值的迭代對象。
內置函數map()
可以將一個函數依次作用(或映射)到序列或迭代器對象的每個元素上,并返回一個map對象作為結果,其中每個元素是原序列中元素經過該函數處理后的結果,不對原序列或迭代器對象做任何修改。
reduce()
內置函數 filter()
列表推導式
阿凡提與國王比賽下棋,國王說要是自己輸了的話阿凡提想要什么他都可以拿得出來。阿凡提說那就要點米吧,棋盤一共64個小格子,在第一個格子里放1粒米,第二個格子里放2粒米,第三個格子里放4粒米,第四個格子里放8粒米,以此類推,后面每個格子里的米都是前一個格子里的2倍,一直把64個格子都放滿。需要多少粒米呢?
切片
- 切片適用于列表、元組、字符串、range對象等類型,但作用于列表時功能最強大。可以使用切片來截取列表中的任何部分,得到一個新列表,也可以通過切片來修改和刪除列表中部分元素,甚至可以通過切片操作為列表對象增加元素。
- 切片使用2個冒號分隔的3個數字來完成:
- 切片操作不會因為下標越界而拋出異常,而是簡單地在列表尾部截斷或者返回一個空列表,代碼具有更強的健壯性。
元組
- 元組也是Python的一個重要序列結構。從形式上,元組的所有元素放在一對圓括號中,元素之間使用逗號分隔。
- 元組屬于不可變(immutable)序列,一旦創建,沒有任何方法可以修改元組中元素的值,也無法為元組增加或刪除元素。
- 元組沒有提供append()、extend()和insert()等方法,無法向元組中添加元素;同樣,元組也沒有remove()和pop()方法,也不支持對元組元素進行del操作,不能從元組中刪除元素,而只能使用del命令刪除整個元組。
- 元組也支持切片操作,但是只能通過切片來訪問元組中的元素,而不支持使用切片來修改元組中元素的值,也不支持使用切片操作來為元組增加或刪除元素。從一定程度上講,可以認為元組是輕量級的列表,或者“常量列表”。
- Python的內部實現對元組做了大量優化,訪問和處理速度比列表更快。
- 如果定義了一系列常量值,主要用途僅是對它們進行遍歷或其他類似用途,而不需要對其元素進行任何修改,那么一般建議使用元組而不用列表。元組在內部實現上不允許修改其元素值,從而使得代碼更加安全,例如調用函數時使用元組傳遞參數可以防止在函數中修改元組,而使用列表則很難做到這一點。
- 作為不可變序列,與整數、字符串一樣,元組可用作字典的鍵,而列表則永遠都不能當做字典鍵使用,也不能作為集合中的元素,因為列表不是不可變的,或者說不可哈希。
生成器推導式
- 從形式上看,生成器推導式與列表推導式非常接近,只是生成器推導式使用圓括號而不是列表推導式所使用的方括號。
- 與列表推導式不同的是,生成器推導式的結果是一個生成器對象,而不是列表,也不是元組。
- 使用生成器對象的元素時,可以根據需要將其轉化為列表或元組,也可以使用生成器對象的__next__()方法或者內置函數next()進行遍歷,或者直接將其作為迭代器對象來使用。
- 不管用哪種方法訪問其元素,當所有元素訪問結束以后,如果需要重新訪問其中的元素,必須重新創建該生成器對象。
字典
- 字典(dictionary)是包含若干“鍵:值”元素的無序可變序列,字典中的每個元素包含“鍵”和“值”兩部分,表示一種映射或對應關系,也稱關聯數組。定義字典時,每個元素的“鍵”和“值”用冒號分隔,不同元素之間用逗號分隔,所有的元素放在一對大括號“{”和“}”中。
- 字典中的“鍵”可以是Python中任意不可變數據,例如整數、實數、復數、字符串、元組等等,但不能使用列表、集合、字典或其他可變類型作為字典的“鍵”。另外,字典中的“鍵”不允許重復,而“值”是可以重復的。
字典創建、元素添加、修改與刪除
??
?
總結
- 上一篇: CHM格式的帮助文档,打开时乱码
- 下一篇: 二叉树---根据【先序、中序序列】and