Python中列表、字典、元組數(shù)據(jù)結(jié)構(gòu)的簡單學(xué)習(xí)筆記
列表
列表是Python中最具靈活性的有序集合對象類型。與字符串不同的是,列表可以包含任何類型的對象:數(shù)字、字符串甚至其他列表。列表是可變對象,它支持原地修改的操作。
Python的列表是:
- 任意對象的有序集合
- 通過偏移讀取
- 可變長度、異構(gòu)以及任意嵌套
- 屬于可變序列的分類
- 對象引用數(shù)組(列表中的存儲的是對象的引用,而不是對象的拷貝)
實(shí)際應(yīng)用中的列表
>>基本列表操作
由于列表是序列,它支持很多與字符串相同的操作。列表對”+”和”*“操作的響應(yīng)與字符串很相似,兩個(gè)操作的意思也是合并和重復(fù),只不過是一個(gè)新的列表,而不是一個(gè)字符串。
>>索引、分片和矩陣
對于列表而言,索引和分片操作與字符串中的操作基本相同。然而對列表進(jìn)行索引的結(jié)果就是你指定的偏移處的對象(不管是什么類型),而對列表分片時(shí)往往返回一個(gè)新的列表。
matrix = [[1,2,3],[4,5,6],[7,8,9]]
上述代碼定義了一個(gè)3*3的二維矩陣。
>>原處修改列表
索引與分片的賦值
當(dāng)使用列表的時(shí)候,可以將它賦值給一個(gè)特定項(xiàng)(偏移)或整個(gè)片段(分片)來改變它的內(nèi)容,索引和分片的賦值都是原地修改,它們對列表進(jìn)行直接修改,而不是生成一個(gè)新的列表作為結(jié)果.Python中的索引賦值與C及大多數(shù)其他語言極為相似——Python用一個(gè)新值取代指定偏移的對象引用
列表方法的調(diào)用
最常用的列表方法是append,它能夠簡單地將一個(gè)單項(xiàng)(對象引用)加至列表末端。與合并不同的是,append允許傳入單一對象而不是列表。L.append(X)與L+[X]的結(jié)果類似,不同的是,前者會原地修改L,而后者會生成新的列表。 另一個(gè)比較常用的方法就是sort,它原地對列表進(jìn)行排序。sort是使用Python標(biāo)準(zhǔn)的比較檢驗(yàn)作為默認(rèn)值(在這里指字符串比較),而且以遞增的順序進(jìn)行排序。另外,我們可以通過傳入一個(gè)關(guān)鍵字參數(shù)來修改排序行為——這是指定按名稱傳遞的函數(shù)調(diào)用中特殊的”name=value”語言。
需要注意的是:要當(dāng)心append和sort是原地修改列表對象的,方法的返回結(jié)果并沒有返回列表(從技術(shù)上講,兩者的返回值都是None)。如果編寫類似L=L.append(X)的語句,將不會得到修改后的值(實(shí)際上,會失去整個(gè)列表的引用)。
- reverse:原地反轉(zhuǎn)列表
- extend:在末端插入多個(gè)元素
- pop:刪除最后一個(gè)元素,同時(shí)返回被刪除的值
- remove:通過值刪除某個(gè)元素
- insert:在偏移處插入某個(gè)元素
- index:查找某元素的偏移
字典
如果把列表看做是有序的對象集合,那么就可以把字典當(dāng)成是無序的集合,它們主要的差別就在于:字典當(dāng)中的元素師通過鍵來存取的,而不是通過偏移存取。 Python字典的主要屬性如下:
- 通過鍵而不是偏移來讀取
- 任意對象的無序集合
- 可變長、異構(gòu)、任意嵌套
- 屬于可變映射類型
- 對象引用表(散列表)(字典中的存儲的是對象的引用,而不是對象的拷貝)
- 實(shí)際應(yīng)用中的字典
>>原處修改字典
與列表相同,向字典中已存在的索引值賦值會改變與索引相關(guān)聯(lián)的值。然而,與列表不同的是,每當(dāng)對新字典鍵進(jìn)行賦值(之前沒有被賦值的鍵),就會在字典內(nèi)生成一個(gè)新的元素。
>>其他字典的方法
- keys:返回字典的鍵列表
- values:返回字典的值列表
- items:返回字典的(key,value)對元組
- update:合并
- pop:從字典中刪除一個(gè)鍵并返回它的值
>>字典用法注意事項(xiàng)
- 序列運(yùn)算無效
- 對新索引賦值會添加項(xiàng)
- 鍵不一定總是字符串
>>創(chuàng)建字典的其他方法
#Method1
D = {'name':'mel','age':45}
#Method2
D = {}
D['name']='mel'
D['age']=45
#Method3
D = dict(name='mel',age=45)
#Method4
D = dict([('name','mel'),('age',45)])
以上四種形式都會建立相同的字典。
>>Python3.0中的字典變化
字典的功能在Python3.0中已經(jīng)有所變化了,具體來說,Python3.0中的字典:
- 支持一種新的字典解析表達(dá)式,這是列表和集合解析的”近親”
- 對于D.key,D.values和D.items方法,返回可迭代的視圖,而不是列表
- 由于前面一點(diǎn),需要新的編碼方式通過排序鍵來遍歷
- 不再直接支持相對大小比較——取而代之的是手動(dòng)比較
- 不再有D.has_key方法——相反,使用in成員關(guān)系測試
字典視圖
在Python3.0中,字典的keys、values和items都返回視圖對象,而在Python2.6中,它們返回實(shí)際的結(jié)果列表。Python3.0中的字典視圖并非創(chuàng)建后不能改變,它們可以動(dòng)態(tài)地反映在視圖對象創(chuàng)建之后對字典做出點(diǎn)修改:
D={'a':1,'b':2,'c':3}
K = D.keys()
V = D.values()
del D['b']
list(K)
上述代碼中,最后一行的結(jié)果是[‘a(chǎn)','c']。
keys方法所返回的對象類似于集合,并且支持交集和并集等常見的操作;values視圖不是這樣,因?yàn)樗鼈儾皇俏ㄒ坏?;但items結(jié)果是的,如果(key,value)對是唯一的并且可散列的話。
元組
元組由簡單的對象構(gòu)成。元組與列表非常類似,只不過元組不能再原處修改(它們是不可變的),通常是寫成圓括號(而不是方括號)中一系列項(xiàng)。它的屬性有:
- 任意對象的有序集合
- 通過偏移存取
- 屬于不可變序列類型
- 固定長度、異構(gòu)、任意嵌套
- 對象引用的數(shù)組
>>實(shí)際應(yīng)用中的元組
元組的特殊語法:逗號和圓括號
因?yàn)閳A括號也可以把表達(dá)式括起來,如果圓括號里的單一對象時(shí)元組對象而不是一個(gè)簡單的表達(dá)式,需要對Python進(jìn)行特別說明。如果確實(shí)想得到一個(gè)元組,只要在這一單個(gè)元素之后、關(guān)閉圓括號之前加上一個(gè)逗號就可以了。
x = (40) y = (40,)
上述代碼中,第一行的x是一個(gè)整數(shù),第二行的y則是一個(gè)包含了一個(gè)元素40的元組。
轉(zhuǎn)換、方法以及不可變性
元組的操作和字符串及列表是一致的,值得注意的區(qū)別在于”+”、”*“以及分片操作應(yīng)用于元組時(shí)將返回新元組,并且元組不提供字符串、列表和字典中的方法。
>>為什么有了列表還要元組
元組的不可變性提供了某種完整性,這樣你可以確保元組在程序中不會被另一個(gè)引用修改,而列表就沒有這樣的保證了。
相關(guān)文章
Python連接MySQL數(shù)據(jù)庫的四種方法
用?Python?連接到?MySQL?數(shù)據(jù)庫的方法不是很系統(tǒng),實(shí)際中有幾種不同的連接方法,而且不是所有的方法都能與不同的操作系統(tǒng)很好地配合,本文涵蓋了四種方法,你可以用它們來連接你的Python應(yīng)用程序和MySQL,需要的朋友可以參考下2024-08-08
Python實(shí)現(xiàn)將橫表和縱表任意轉(zhuǎn)換的兩種方法
在日常做數(shù)據(jù)分析,接收到最多的表格是縱表,每個(gè)字段變量都有很長數(shù)據(jù)的長表,我們稱之為縱向數(shù)據(jù),但是,有時(shí)候,我們也會遇到橫表,對于橫向數(shù)據(jù),我們會數(shù)據(jù)轉(zhuǎn)化,將其轉(zhuǎn)化為縱向數(shù)據(jù),感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧2023-12-12
Python代碼實(shí)現(xiàn)刪除一個(gè)list里面重復(fù)元素的方法
今天小編就為大家分享一篇關(guān)于Python代碼實(shí)現(xiàn)刪除一個(gè)list里面重復(fù)元素的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04
Python內(nèi)置函數(shù)Type()函數(shù)一個(gè)有趣的用法
這篇文章主要介紹了Python內(nèi)置函數(shù)Type()函數(shù)一個(gè)有趣的用法,本文講解的是個(gè)人發(fā)現(xiàn)在的一個(gè)有趣的用法,注意這種寫法會導(dǎo)致代碼很難讀,需要的朋友可以參考下2015-02-02
Python使用pandas實(shí)現(xiàn)對數(shù)據(jù)進(jìn)行特定排序
在數(shù)據(jù)分析和處理過程中,排序是一項(xiàng)常見而重要的操作,本文將詳細(xì)介紹如何利用pandas對數(shù)據(jù)進(jìn)行特定排序,包括基本排序、多列排序、自定義排序規(guī)則等方面的內(nèi)容,需要的可以了解下2024-03-03
Python通過跳板機(jī)訪問數(shù)據(jù)庫的方法
跳板機(jī)是一類可作為跳板批量操作的遠(yuǎn)程設(shè)備的網(wǎng)絡(luò)設(shè)備,是系統(tǒng)管理員和運(yùn)維人員常用的操作平臺之一。本文給大家介紹Python通過跳板機(jī)訪問數(shù)據(jù)庫的方法,感興趣的朋友跟隨小編一起看看吧2021-10-10

