列表與字典(還沒(méi)接觸到)是Python中兩個(gè)主要的數(shù)據(jù)類(lèi)型。他們可以被修改,可以增長(zhǎng)可以縮短,也可以嵌套。
列表 list
列表可以完成大多數(shù)集合類(lèi)的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。它支持字符,數(shù)字,字符串甚至可以包含列表(所謂嵌套)。
Python 的列表與c語(yǔ)言中的數(shù)組訪(fǎng)問(wèn)方法相同,通過(guò)偏移地址訪(fǎng)問(wèn)。
下面舉幾個(gè)列表的例子,圖片來(lái)自《Python學(xué)習(xí)手冊(cè)(第三版)》
為了加速進(jìn)度以及方便查詢(xún),我們看一下對(duì)列表常用操作的整理,圖片來(lái)自《Python學(xué)習(xí)手冊(cè)(第三版)》
現(xiàn)在我們?cè)敿?xì)講一下幾個(gè)list的操作。
首先我們明確,Python的list可以容納任何對(duì)象。不管他是什么格式的。
1)創(chuàng)建list
創(chuàng)建列表的操作非常簡(jiǎn)單,只要用中括號(hào)報(bào)過(guò)一系列逗號(hào)分隔的值就可以了。就像第一個(gè)圖片上那樣。
2)list 切片
定義新列表后,我們可以列表中的任何一個(gè)部分作為新的列表,該技術(shù)在dive in python 中稱(chēng)為切片。
讓我們直接看程序。
a_list =['a','b','c','d','e','f'] # 創(chuàng)建一個(gè)列表 print a_list[1:3] # 在屏幕上打印一個(gè)切片
值得注意的是,在list偏移訪(fǎng)問(wèn)中,與C中數(shù)組類(lèi)似,同樣用a_list[0]表示列表第一項(xiàng)。
上面的程序我們得到了如下的結(jié)果:
b c 分別是列表中第二,第三個(gè)元素,序號(hào)應(yīng)該是1 和2 ,可以看出,對(duì)于 a_list[x,y] 的切片,切片片段為序號(hào)x到y(tǒng)-1之間的內(nèi)容。
我們也可以截取半段,讓我們看程序
# 位置 1 2 3 4 5 6
# 序號(hào) 0 1 2 3 4 5
a_list =['a','b','c','d','e','f'] # 定義 print a_list[:3] print a_list[3:]
從結(jié)果中我們可以看出,第一個(gè)片段[:3] 取的是從第一位到第三位的片段,而[3:] 獲取的是從第四位,到結(jié)尾的片段。
無(wú)論列表多長(zhǎng)[:n]片段中總含有n個(gè)元素。
如果將x,y都留空,那么程序?qū)⑷×斜韮?nèi)全部的元素,但是卻獲得了一個(gè)新的列表。
如果x , y中有負(fù)數(shù)怎么辦,讓我們來(lái)看一下
# 位置 1 2 3 4 5 6 # 序號(hào) 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] print a_list[-1:3] print a_list[3:-1]
第一個(gè)print輸出了空的list, 第二個(gè)卻輸出了兩個(gè)。 認(rèn)真看我們可以看出,負(fù)數(shù)是指從右往左數(shù),正數(shù)是指,從左往右。
3)向列表list中添加元素
從第三題中,我們認(rèn)識(shí)到append可以向list中添加元素。
a_list.append('NEW')
讓我們測(cè)試一下這句話(huà).
# 位置 1 2 3 4 5 6 # 序號(hào) 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list.append('NEW') print a_list
字符串 NEW 已經(jīng)被添加到該列表結(jié)尾處了.
當(dāng)然除了append 這種只能在末尾添加 元素 的操作來(lái)說(shuō),我們還要插入操作
a_list.insert( n,35434)
insert 后面有兩個(gè)操作符, 那么n表示插入哪個(gè)元素之后, 那串?dāng)?shù)表示插入什么東西,當(dāng)然任何類(lèi)型的都可以,讓我們?cè)囈幌逻@個(gè)新認(rèn)識(shí)的方法.
# 位置 1 2 3 4 5 6 # 序號(hào) 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list.insert(2,'NEW') print a_list a_list.insert(6,43223452) print a_list
可以看到,插入位置是n號(hào)元素之前。
這兩種操作都是單個(gè)元素插入,當(dāng)我們需要將大量數(shù)據(jù)放在列表末尾的時(shí)候,我們就需要另一個(gè)新的方法了。
a_list.extend( [ 'fdaf',342 ] )
看一下例子就好了.
# 位置 1 2 3 4 5 6 # 序號(hào) 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list.extend( [ 'fdaf',342 ] ) print a_list
當(dāng)然我們還有更簡(jiǎn)單的在末尾擴(kuò)增list的方法.
+
沒(méi)錯(cuò),就是一個(gè)符號(hào).
# 位置 1 2 3 4 5 6 # 序號(hào) 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list+=[ 'fdaf',342 ] print a_list
看,我們得到了相同的結(jié)果!
4)在列表中查詢(xún)
在C語(yǔ)言中,遍歷數(shù)組什么的是常見(jiàn)的問(wèn)題,我們需要知道,數(shù)組中有沒(méi)有某個(gè)元素,某個(gè)元素在數(shù)組中的什么位置,某個(gè)元素在數(shù)組中出現(xiàn)的次數(shù) 等等等。這些也許在C中需要長(zhǎng)篇累牘的描述算法,但是Python豐富的庫(kù)資源已經(jīng)把這些問(wèn)題解決了。讓我們看看下面的表吧:
a_list.count( 'NEW' ) #計(jì)算出現(xiàn)次數(shù) a_list.index( 'NEW' ) #尋找第一次出現(xiàn)的位置 'NEW' in a_list #確認(rèn)元素是否出現(xiàn)在list中
現(xiàn)在我們測(cè)試一下這幾種功能。
# 位置 1 2 3 4 5 6 # 序號(hào) 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] print a_list.count( 'NEW' ) #計(jì)算出現(xiàn)次數(shù) print 'NEW' in a_list #確認(rèn)元素是否出現(xiàn)在list中
我們沒(méi)有測(cè)試index,因?yàn)閕ndex 有個(gè)比較有趣的現(xiàn)象,讓我們來(lái)試一下。
# 位置 1 2 3 4 5 6 7 # 序號(hào) 0 1 2 3 4 5 6 a_list =['a','b','c','d','e','f','NEW'] print a_list.index( 'NEW' )
list中存在NEW,返回了正確的值。如果沒(méi)有NEW會(huì)怎么樣的呢
# 位置 1 2 3 4 5 6 # 序號(hào) 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] print a_list.index( 'NEW' )
竟然提示錯(cuò)誤,當(dāng)然,這個(gè)就是引發(fā)了一個(gè)異常。之后我們會(huì)漸漸認(rèn)識(shí)到這個(gè)做法的好處。
5)從列表中刪除元素
既然我們插入了元素,那么我們也可以刪除他,但是,元素的插入與刪除并不像C語(yǔ)言那么麻煩,刪除操作是如此的簡(jiǎn)單,大家看下例子就會(huì)了。
當(dāng)我們知道元素的確切位置的時(shí)候,我們使用
del a_list[n]
當(dāng)我們不知道位置,而是知道刪除什么的時(shí)候,使用:
a_list.remove( )
與求元素準(zhǔn)確位置一樣,如果刪除一個(gè)list中不存在的元素會(huì)引發(fā)程序錯(cuò)誤。
最后我們確認(rèn)一點(diǎn),空列表的布爾值為False,其他的列表均為T(mén)ure。