python常用数据结构_Python入门: 数据结构大汇总
一、列表
1.列表的創建
列表是有序集合,沒有固定大小,能夠保存任意數量任意類型的 Python 對象,語法為?[元素1, 元素2, ..., 元素n]。關鍵點是 “?中括號 [ ]”和 “逗號 ,”
中括號 把所有元素綁在一起
逗號 將每個元素一一分開利用range()創建列表
利用推導式創建列表
注意:
由于list的元素可以是任何對象,因此列表中所保存的是對象的指針。即使保存一個簡單的[1,2,3],也有3個指針和3個整數對象。
x = [a] * 4操作中,只是創建4個指向list的引用,所以一旦a改變,x中4個a也會隨之改變。
2.?操作列表元素
列表不像元組,列表內容可更改 (mutable),因此附加 (append, extend)、插入 (insert)、刪除 (remove, pop) 這些操作都可以用在它身上。list.append(obj)?在列表末尾添加新的對象,只接受一個參數,參數可以是任何數據類型,被追加的元素在 list 中保持著原結構類型;
list.extend(seq)?在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表);
list.insert(index, obj)?在編號?index?位置插入?obj
list.remove(obj)?移除列表中某個值的第一個匹配項
del var1[, var2 ……]?刪除單個或多個對象
列表切片通用寫法是 list[start : stop : step]notebook實例運行結果1
列表的常用操作符:
(1)等號操作符:==
(2)連接操作符+,將兩個list相加,需要創建新的 list 對象,從而需要消耗額外的內存?;
(3)重復操作符 *
(4)成員關系操作符?in、not in
list.count(obj) 統計某個元素在列表中出現的次數
list.index(x[, start[, end]]) 從列表中找出某個值第一個匹配項的索引位置
list.reverse() 反向列表中元素
list.sort(key=None, reverse=False) 對原列表進行排序 ( key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序;reverse -- 排序規則,reverse = True 降序, reverse = False 升序(默認);該方法沒有返回值,但是會對列表的對象進行排序 )notebook實例運行結果2
二、元組
1. 創建和訪問一個元組
定義語法為:(元素1, 元素2, ..., 元素n),小括號把所有元素綁在一起,逗號將每個元素一一分開。Python 的元組與列表類似,不同之處在于tuple被創建后就不能對其進行修改,類似字符串。
元組使用小括號,列表使用方括號。
元組與列表類似,也用整數來對它進行索引 (indexing) 和切片 (slicing)
創建元組可以用小括號 (),也可以什么都不用,為了可讀性,建議還是用 ()。
元組中只包含一個元素時,需要在元素后面添加逗號,否則括號會被當作運算符使用notebook實例運行結果3
2.?操作元組元素
元組有不可更改 (immutable) 的性質,因此不能直接給元組的元素賦值,但是只要元組中的元素可更改 (mutable),那么我們可以直接更改其元素,注意這跟賦值其元素不同等號操作符:== ,只有成員、成員位置都相同時才返回True
連接操作符?+ ,首尾拼接
重復操作符?* ,復制拼接
成員關系操作符?in、not in
元組大小和內容都不可更改,因此只有 count 和 index 兩種方法
解壓元組notebook實例運行結果4
三、字符串
1. 字符串的定義Python 中字符串被定義為引號之間的字符集合。
Python 支持使用成對的 單引號 或 雙引號
如果字符串中需要出現單引號或雙引號,可以使用轉義符號\對字符串中的符號進行轉義Python 的常用轉義字符
2. 操作字符串類似于元組具有不可修改性
從 0 開始 (和 Java 一樣)
切片通常寫成?start:end?這種形式,包括「start?索引」對應的元素,不包括「end索引」對應的元素。
索引值可正可負,正索引從 0 開始,從左往右;負索引從 -1 開始,從右往左。使用負數索引時,會從最后一個元素開始計數。最后一個元素的位置編號是 -1。notebook實例運行結果5capitalize()?將字符串的第一個字符轉換為大寫
lower()?轉換字符串中所有大寫字符為小寫。
upper()?轉換字符串中的小寫字母為大寫。
swapcase()?將字符串中大寫轉換為小寫,小寫轉換為大寫。
count(str, beg= 0,end=len(string))?返回str在 string 里面出現的次數,如果beg或者end指定則返回指定范圍內str出現的次數。
endswith(suffix, beg=0, end=len(string))?檢查字符串是否以指定子字符串?suffix?結束,如果是,返回 True,否則返回 False。如果?beg?和?end?指定值,則在指定范圍內檢查。
startswith(substr, beg=0,end=len(string))?檢查字符串是否以指定子字符串?substr?開頭,如果是,返回 True,否則返回 False。如果?beg?和?end?指定值,則在指定范圍內檢查
find(str, beg=0, end=len(string))?檢測?str?是否包含在字符串中,如果指定范圍?beg?和?end,則檢查是否包含在指定范圍內,如果包含,返回開始的索引值,否則返回 -1。
rfind(str, beg=0,end=len(string))?類似于?find()?函數,不過是從右邊開始查找。
isnumeric()?如果字符串中只包含數字字符,則返回 True,否則返回 False
ljust(width[, fillchar])返回一個原字符串左對齊,并使用fillchar(默認空格)填充至長度width的新字符串。
rjust(width[, fillchar])返回一個原字符串右對齊,并使用fillchar(默認空格)填充至長度width的新字符串
lstrip([chars])?截掉字符串左邊的空格或指定字符。
rstrip([chars])?刪除字符串末尾的空格或指定字符。
strip([chars])?在字符串上執行lstrip()和rstrip()。
partition(sub)?找到子字符串sub,把字符串分為一個三元組(pre_sub,sub,fol_sub),如果字符串中不包含sub則返回('原字符串','','')。
rpartition(sub)類似于partition()方法,不過是從右邊開始查找
replace(old, new [, max])?把 將字符串中的old替換成new,如果max指定,則替換不超過max次。
split(str="", num)?不帶參數默認是以空格為分隔符切片字符串,如果num參數有設置,則僅分隔num個子字符串,返回切片后的子字符串拼接的列表。
splitlines([keepends])?按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表,如果參數keepends為 False,不包含換行符,如果為 True,則保留換行符
maketrans(intab, outtab)?創建字符映射的轉換表,第一個參數是字符串,表示需要轉換的字符,第二個參數也是字符串表示轉換的目標。
translate(table, deletechars="")?根據參數table給出的表,轉換字符串的字符,要過濾掉的字符放到deletechars參數中
3. 字符串格式化format?格式化函數Python 字符串格式化符號
格式化操作符輔助指令
四、字典
p.s. : 可變類型與不可變類型序列是以連續的整數為索引,與此不同的是,字典以"關鍵字"為索引,關鍵字可以是任意不可變類型,通常用字符串或數值。
字典是 Python 唯一的一個?映射類型,字符串、元組、列表屬于序列類型。
判斷是否數據類型X是否為可變類型的方法為:hash(X)。(數值、字符和元組 都能被哈希,因此它們是不可變類型;列表、集合、字典不能被哈希,因此它是可變類型)
1.字典的定義
字典 是無序的 鍵:值(key:value)對集合,鍵必須是互不相同的(在同一個字典之內)。dict?內部存放的順序和?key?放入的順序是沒有關系的。
dict?查找和插入的速度極快,不會隨著?key?的增加而增加,但是需要占用大量的內存。
字典 定義語法為?{元素1, 元素2, ..., 元素n}其中每一個元素是一個「鍵值對」-- 鍵:值 (key:value)
關鍵點是「大括號 {}」,「逗號 ,」和「冒號 :」
大括號 -- 把所有元素綁在一起
逗號 -- 將每個鍵值對分開
冒號 -- 將鍵和值分開
2. 創建和訪問字典如果我們取的鍵在字典中不存在,會直接報錯KeyError通過構造函數dict()?創建一個空的字典,通過key直接把數據放入字典中,但一個key只能對應一個value,多次對一個key放入 value,后面的值會把前面的值沖掉notebook實例運行結果6
dict.fromkeys(seq[, value])?用于創建一個新字典,以序列?seq?中元素做字典的鍵,value?為字典所有鍵對應的初始值notebook實例運行結果7
dict.keys()返回一個可迭代對象,可以使用?list()?來轉換為列表,列表為字典中的所有鍵。
dict.values()返回一個迭代器,可以使用?list()?來轉換為列表,列表為字典中的所有值
dict.items()以列表返回可遍歷的 (鍵, 值) 元組數組
dict.get(key, default=None)?返回指定鍵的值,如果值不在字典中返回默認值
dict.setdefault(key, default=None)和get()方法 類似, 如果鍵不存在于字典中,將會添加鍵并將值設為默認值
key in dict?in?操作符用于判斷鍵是否存在于字典中,如果鍵在字典 dict 里返回true,否則返回false。而not in操作符剛好相反,如果鍵在字典 dict 里返回false,否則返回true
dict.pop(key[,default])刪除字典給定鍵?key?所對應的值,返回值為被刪除的值。key?值必須給出。若key不存在,則返回?default?值
del dict[key]?刪除字典給定鍵?key?所對應的值
dict.popitem()隨機返回并刪除字典中的一對鍵和值,如果字典已經為空,卻調用了此方法,就報出KeyError異常
dict.clear()用于刪除字典內所有元素
dict.copy()返回一個字典的淺復制直接賦值和 copy 的區別dict.update(dict2)把字典參數?dict2?的?key:value對 更新到字典?dict?里
五、集合
Python 中set與dict類似,也是一組key的集合,但不存儲value。由于key不能重復,所以,在set中,沒有重復的key。故集合的兩個特點:無序 (unordered) 和唯一 (unique)
1. 集合的創建先創建對象再加入元素。
在創建空集合的時候只能使用s = set(),因為s = {}創建的是空字典
直接把一堆元素用花括號括起來{元素1, 元素2, ..., 元素n},重復元素在set中會被自動被過濾。
使用set(value)工廠函數,把列表或元組轉換成集合
由于 set 存儲的是無序集合,所以我們不可以為集合創建索引或執行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值,但是可以判斷一個元素是否在集合中
2. 操作集合元素可以使用len()內建函數得到集合的大小。
可以使用for把集合中的數據一個個讀取出來。
可以通過in或not in判斷一個元素是否在集合中已經存在
set.add(elmnt)用于給集合添加元素,如果添加的元素在集合中已存在,則不執行任何操作
set.update(set)用于修改當前集合,可以添加新的元素或集合到當前集合中,如果添加的元素在集合中已存在,則該元素只會出現一次,重復的會忽略
set.remove(item)?用于移除集合中的指定元素。如果元素不存在,則會發生錯誤
set.discard(value)?用于移除指定的集合元素。remove()?方法在移除一個不存在的元素時會發生錯誤,而?discard()?方法不會
set.pop()?用于隨機移除一個元素
由于 set 是無序和無重復元素的集合,所以兩個或多個 set 可以做數學意義上的集合操作:
(1)set.intersection(set1, set2)?、set1 & set2? 返回兩個集合的交集,set.intersection_update(set1, set2)?交集,在原始的集合上移除不重疊的元素;
(2)set.union(set1, set2)、 set1 | set2?返回兩個集合的并集;
(3)set.difference(set)、?set1 - set2?返回集合的差集,set.difference_update(set)?直接在原來的集合中移除元素,沒有返回值;
(4)set.symmetric_difference(set),set1 ^ set2返回集合的異或,set.symmetric_difference_update(set)移除當前集合中在另外一個指定集合相同的元素,并將另外一個指定集合中不同的元素插入到當前集合中;
(5)set.issubset(set)、set1 <= set2判斷集合是不是被其他集合包含,如果是則返回 True,否則返回 False;
(6)set.issuperset(set)、set1 >= set2用于判斷集合是不是包含其他集合,如果是則返回 True,否則返回 False;
(7)set.isdisjoint(set)?用于判斷兩個集合是不是不相交,如果是返回 True,否則返回 False
六、序列
在 Python 中,序列類型包括字符串、列表、元組、集合和字典,這些序列支持一些通用的操作,但比較特殊的是,集合和字典不支持索引、切片、相加和相乘操作。
針對序列的內置函數list(sub)?把一個可迭代對象轉換為列表。
tuple(sub)?把一個可迭代對象轉換為元組。
str(obj)?把obj對象轉換為字符串
len(s)?返回對象(字符、列表、元組等)長度或元素個數,s 為對象
zip(iter1 [,iter2 [...]])
(1)用于將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的對象,這樣做的好處是節約了不少的內存。
(2)我們可以使用?list()?轉換來輸出列表。
(3)如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用?*?號操作符,可以將元組解壓為列表。
notebook實例運行結果1
總結
以上是生活随笔為你收集整理的python常用数据结构_Python入门: 数据结构大汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 陕西中小企业促进局 e-mail_重点注
- 下一篇: python每天定时9点执行_win10