1、前言
凜東將至,瓊恩·雪諾當上司令官命令山姆威爾去南方,到舊鎮學習成為一個學士再回黑城堡,山姆發現如要熟練在圖書館中查詢藏書,必須熟悉“串列”、“集合”、“元組”和“字典”4種資料組織形式,
2、串列list
圖書館所有書架上的藏書都是“串列”形式,為了幫助理解串列山姆記得小時候最開心的事情就是逛街,因為老媽會給買最喜歡吃的糖葫蘆,竹簽可以把許多山楂串成串,串列處理資料與吃糖葫蘆其實很相似,:

上面兩種形式都是“串列”,特點如下:
- 元素有序,串列中的元素都是有順序的,可以通過下標來定位,
- 可以編輯,串列變數中的元素可以被洗掉、添加,
2.1 串列的定義
|元素0|元素1|...
如上所示,串列中的元素是從0開始的,
如下代碼使用中括號和逗號分隔來定義串列中的內容,如下定義了各種串列形式,比如:包括1,2,3,4,5五個整數的串列....
1 a=[1,2,3,4,5] #定義5個元素的串列 2 b=[] #定義了空的串列 3 c=['夜王前傳',1045,'龍晶使用方法',1056] #定義了書名頁數 4 d=[['夜王前傳','龍晶使用方法'],[1045,1056]] #定了2個串列元素(書名串列、頁數串列)的串列
定義完成可以通過如下的方式“取出資料”:
a[0] #表示第0個元素1 a[1] #表示第1個元素2 c[1] #表第第1個元素1045
此外,還可以使用負數來倒著取元素,今天山姆的女友吉莉來看他了,提義兩個人玩撲克牌,我們定義一幅撲克可以這樣定義:

2.2 切片操作
串列在計算機中有如下的主流操作: 切片、洗掉、彈出、添加,
切片就像在書柜(串列)中抽出中間一部分書本(元素),切片操作是這樣的,使用冒號分隔前后位置(重要:后面的位置是不被包括的),繼續之前定義我們看示例:
a=[1,2,3,4,5] #定義5個元素的串列 #形成新的串列[2,3] a[-4:-2] #形成新的串列[2,3] a[1:3]
切片可以省略前后的數字,表示開始和結束,切片有好處就是不會產生“溢位錯誤”,如下的代碼在計算時只回傳空串列,而不會出錯:
#表示從第100位置開始到結束的切片,回傳空 a[100:] #下面陳述句會產生溢位錯誤 a[100]
2.3 添加洗掉操作
使用append動作來添加元素至隊尾、使用del陳述句洗掉元素、remove動作洗掉串列中某一個值(只能一個),如下所示:
串列.append(元素) #添加元素進串列尾
串列.remove(值) #洗掉串列中的值一次
del 元素 #在記憶體中洗掉元素
a=[1,2,3,4,5] #定義5個元素的串列 del a[0] print('洗掉a第0個:',a) a.append(5) print('添加5,a:',a) a.remove(5) #只能洗掉一次5 print('洗掉數值5,a:',a)
運行的結果如下:
洗掉a第0個: [2, 3, 4, 5]
添加5,a: [2, 3, 4, 5, 5]
洗掉數值5,a: [2, 3, 4, 5]
大家可能發現,除了del陳述句比較特殊,其它append和remove動作在運行時都需要把串列變數放在小數點前,現在大家可以理解為這是串列的專門的動作,這種寫法表示:呼叫串列class類的方法函式,大家要記往,
del 陳述句是內置命令,不光應用于串列它表示在記憶體中洗掉銷毀物件,任何變數都可以被“銷毀”
2.4 插入彈出操作
彈出pop操作也是串列的專門的“方法”,表示從串列中的某個位置洗掉物件,但是會同時回傳這個物件,就好像子彈從彈匣中彈出來一樣,同樣插入insert操作也可以基于位置(前文remove是基于數值而不是位置)把新元素插入串列,
串列.pop(位置)#不寫就默認最后一個
串列.insert(位置,元素) #把元素插入位置當中
a=[2,3,4,5,5]
b = a.pop(3)
print('彈出第3個元素,a:',a,',彈出了:',b)
#第0個位置前插入字符“首”
a.insert(0,'首')
print('插入a:',a)
上面的代碼運行結果如下圖:
彈出第3個元素,a: [2, 3, 4] ,彈出了: 5
插入a: ['首', 2, 3, 4]
3、元組tuple
元組可看成是“只讀”的串列,它使用成對的圓括號()來定義,其中的元素都有0開始的位置,但只能讀取而不能添加和洗掉其中的元素,這就類似于Sam在學院中看到的珍貴特定古籍書柜,柜中的書籍都是固定位置的,只能取閱而不能更新新的書籍進來,也不允許把書籍抽走放在別處或是銷毀,
在Sam學院中把書籍位置使用(柜號,行號,列號)的元組來表示,我們看示例:
#Sam學院中把書籍位置使用(柜號,行號,列號)來表示 :
book_a_loc = (1,23,34)
book_b_loc = (5,10,90)
print('a書位置:',book_a_loc)
print('a書行列:',book_a_loc[1:])
print('b書行號:',book_b_loc[1])
#試洗掉第1個元素會出錯
del book_a_loc[0]
運行后的結果如下:
a書位置: (1, 23, 34) a書行列: (23, 34) b書行號: 10 Traceback (most recent call last): File "/....../demo2.py", line 7, in <module> del book_a_loc[0] TypeError: 'tuple' object doesn't support item deletion
錯誤資訊提示我們,tuple元組型別不支持元素洗掉,
嘿嘿:Sam問道如果把串列加入元組呢,到底可編輯還是不可編輯?
結論是這樣的,元組雖然不能編輯,但是其中作為元素的串列卻是可以編輯的,
具體交給讀者去試試吧!
4、集合set
在學院中有一些正在借閱當中的書籍,通常被學士位亂堆在桌子上,也沒有順序,這種在python中沒有順序的元素集叫“集合”,我們定義空集合時使用set(),而不用{}因為慷訓括號表示空的字典,我們定義集合時使用{元素1,....,}來表示,它有如下的特點:
- 無序
- 不重復
s = {'男','男','女'}
print(s)
在上面的定義當中,我們有重復的男,但是列印出來只有2個值:
{'女', '男'}
集合型別在數學上有交并差補運算,同樣在python當中也有運算子分別是&|-^,具體示例如下圖:
n1 = {'張','王'}
n2 = {'何','王'}
print('合',n1&n2,'并',n1|n2,'差',n1-n2,'補',n1^n2)
運行結果如下:
合 {'王'} 并 {'何', '張', '王'} 差 {'張'} 補 {'何', '張'}
5、字典dict
就像Sam經常使用的字典類書籍,Sam想查詞dragonglass(龍晶石)就從dragonglass索引去找內容,python有一種資料結構dict可以實作上述根據索引來查詢的功能,dict當中的元素由冒號分隔的兩部分組成,前部分當索引的叫關鍵字key(個人覺得叫鑰匙更形象),當內容的叫value(值),
字典內的元素沒有數字位置,只能通過關鍵字來獲得內容,
1 #字典定義分隔符{},后可用回車 2 d = { 3 'dragon':'一種古老的動物', 4 '龍晶':'使用龍的骨骼形成化石晶體', 5 } 6 #查詢 龍晶 7 print('龍晶',d['龍晶']) 8 #插入元素 9 d['丹尼莉絲'] = '坦格利安家族的風暴降生丹尼莉絲坦格利安一世、不焚者、彌林女王、安達爾人和先民的女王、七國統治者暨全境守護者、草原上的卡麗熙、打碎鐐銬者以及龍之母!' 10 #洗掉dragon 11 d.pop('dragon') 12 #列印整個字典 13 print('d的內容',d)
運行后,結果如下:
龍晶 使用龍的骨骼形成化石晶體 d的內容 {'龍晶': '使用龍的骨骼形成化石晶體', '丹尼莉絲': '坦格利安家族的風暴降生丹尼莉絲坦格利安一世、不焚者、彌林女王、安達爾人和先民的女王、七國統治者暨全境守護者、草原上的卡麗熙、打碎鐐銬者以及龍之母!'}
通過對字典的熟練運用,SAM找到了龍晶礦的所在地,他決定把這個訊息告訴SNOW,幫助七國打贏夜王之戰,關注后續發展哦,
恭喜你又進步了一點,關注并跟隨小牛叔,擺正編程入門姿式!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/418061.html
標籤:Python
