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