一坐昙、列表和元組(可以放置任意數(shù)據(jù)類(lèi)型的有序集合)
1.列表是動(dòng)態(tài)的恕出,長(zhǎng)度大小不固定唉铜,可以增刪改查:
list = [1,'a']
列表中增加數(shù)據(jù):list.append('test')
列表中刪除數(shù)據(jù):del list[1]
列表中查詢(xún)數(shù)據(jù):list[0]
列表中修改數(shù)據(jù):list[0] = 'aaaa'
2.元組是靜態(tài)的筷屡,長(zhǎng)度大小固定,不可增刪改查
tump = ('a',1)
元組之間合并new_tump = tump+(5,)
3.列表和元組都支持負(fù)數(shù)索引:-1表示最后一個(gè)元素尚骄,-2表示倒數(shù)第二個(gè)元素? ?list[-1]
4.切片操作:list[1:3]? ?返回列表中的第2,3個(gè)元素块差;tump[1:3]返回?cái)?shù)組中的第2,3個(gè)元素
5.列表和元組可以隨意嵌套:[[1,2],[3,4]]? ? ((1,2),(3,4))
6.列表通過(guò)tuple函數(shù)轉(zhuǎn)換成元組:tuple([1,2,3]);元組通過(guò)list函數(shù)轉(zhuǎn)換成列表:list((1,2,3))
7.常用內(nèi)置函數(shù)
count(item):返回列表/元組中item元素出現(xiàn)的次數(shù)
index(item):返回列表/元組中item元素第一次出現(xiàn)的索引
list.reverse():原地倒轉(zhuǎn)列表 /元組? 例如list=[1,2,3,5,4]? ? list.reverse()? print(list)? --->[4,5,3,2,1]
list.sort():對(duì)列表/元組進(jìn)行排序 ?例如list=[1,2,3,5,4] ? list.sort()--->[1, 2, 3, 4, 5]
二乖仇、列表和元組存儲(chǔ)方式
1.列表是動(dòng)態(tài)的憾儒,需要存儲(chǔ)指針询兴,來(lái)指向?qū)?yīng)的元素乃沙。由于列表可變,需要額外存儲(chǔ)已經(jīng)分配的長(zhǎng)度大小诗舰,這樣就可以實(shí)時(shí)追蹤列表空間的使用情況警儒,當(dāng)空間不足時(shí),及時(shí)分配額外空間。
l = []
l.__sizeof__() // 空列表的存儲(chǔ)空間為40字節(jié)
40
l.append(1)
l.__sizeof__()
72 // 加入了元素1之后蜀铲,列表為其分配了可以存儲(chǔ)4個(gè)元素的空間 (72 - 40)/8 = 4
l.append(2)
l.__sizeof__()
72 // 由于之前分配了空間边琉,所以加入元素2,列表空間不變
l.append(3)
l.__sizeof__()
72 // 同上
l.append(4)
l.__sizeof__()
72 // 同上
l.append(5)
l.__sizeof__()
104 // 加入元素5之后记劝,列表的空間不足变姨,所以又額外分配了可以存儲(chǔ)4個(gè)元素的空間
2.元組的大小、長(zhǎng)度是固定的厌丑。
三定欧、列表和元組的性能:總體來(lái)說(shuō)元組的性能優(yōu)于列表
1.python后臺(tái)對(duì)靜態(tài)數(shù)據(jù)做了資源緩存(resource caching)。垃圾回收機(jī)制:如果一些變量不被使用怒竿,python會(huì)回收它們占用的內(nèi)存砍鸠,返還給操作系統(tǒng),以便其他變量使用耕驰。
2.對(duì)于元組這類(lèi)的靜態(tài)變量爷辱,不被使用且占用空間不大,PYTHON會(huì)暫時(shí)緩存這部分內(nèi)存朦肘,下次再創(chuàng)建同樣大小的元組時(shí)饭弓,python可以不用再向操作系統(tǒng)發(fā)出請(qǐng)求,去尋找內(nèi)存媒抠,而是可以直接分配之前緩存的內(nèi)存空間示启,這樣可以加寬程序的運(yùn)行速度。