本節,我們將認識乙個新的概念:資料結構,資料結構是通過某種方式組織在一起的資料元素的集合,這些元素可以是數字或者字元,也可以是其他的資料結構,即巢狀一種資料結構。在python中,最基本的資料結構是序列。序列中的每個元素被分配乙個序列號——元素的位置,也稱為索引。第乙個索引是0,第二個為1,以此類推。好學的朋友肯定會問,如果要從最後乙個開始計數,是從len()開始計數嗎?當然也可以,不過python內建了乙個更簡單的計數方法。序列的最後乙個元素計為-1。
python包含了6中內建的序列,我們用的上的就兩個:元組和列表。兩者的主要區別在於,列表可以修改,元組則不能。在我們實際操作中,可能會新增元素,那麼列表也許會更合適些,當然處於某種原因,當序列不能修改時,元組更為合適。
所有序列型別都可以進行某些特定的操作。這些操作包括:索引,分片,加,乘以及檢查某個元素是否是屬於序列成員。除此之外,python還有計算序列的長度,找出最大和最小元素的內建函式。更高階的還有迭代,依次對序列的每個元素進行重複某些操作。
1.1 索引
序列中所有元素都是有編號的,從0開始遞增。這些元素可以通過編號分別訪問,例如:
索引,就是能通過索引獲取元素,最後乙個元素的位置編號不是-0,而是-1,這也能理解為什麼我們第乙個元素的位置是0,而不用1.
1.2 分片
與索引類似,分片可以訪問一定範圍內的元素。分片通過冒號隔開兩個索引來實現。
從上的例子我們可以看到,取a中第5個位置到第10個位置的元素,從上面的知識中我們知道,計數從0開始,應該提取第6到第11個元素。結果只有5個元素,說明最右邊位置的元素並不包含在內。
分片操作對於我們提取序列的一部分是很有用的,分片操作的實現需要兩個索引作為邊界,第乙個索引的元素包含在分片內,第二個則不包含在分片內,簡記為左閉右開。
任何一門語言都注重優雅,python也不列外,如何優雅的訪問a中後三位元素呢?
大家先想想?
a[-3:-1]顯然是不對的,前面學習了左閉右開,但如果使用0作為最後一步的索引,結果又會如何?
很顯然結果為空,左邊比右邊索引更晚出現,當然不能擷取序列。幸好,這裡有個捷徑,如果分片所得部分包括序列結尾的元素,那麼,只需置空最後乙個索引即可。同樣適用於起始序列。
1.2.2 切片的步長。
跟r裡面一樣,分片的起始和結束位點需要指定,而另乙個引數步長,通常是**設定的。
這個需要仔細想清楚,左邊在結果之中,右邊不在切片之內,當使用步長為負時,開始點必須大於終止點,對於未指定起始終止位置時,步長為正,從左至右,步長為負,從右至左。
1.2 序列相加
使用+可以進行序列的連線操作
從上面的例子我們可以得出,兩個列表可以直接相加,列表裡面的元素內建其它的資料結構,列表通常是用擴起來,字串通常是用『』括起來。列表和字串是無法連線在一起的,而[1,2,3]與[b,c]沒有連線起來是因為b,c沒有被定義。
簡單來講,只有相同的兩種型別的序列才能進行連線操作。
1.4乘法
原來的序列重複n次。
由於一開始我定義了a是乙個字串,因此,[a]是列表,a是'ustilaginoidea virens'這個字串,『a』是字串a。
1.5 成員資格
in運算子可以檢測乙個值是否在序列中。
1.6 長度,最大最小值
內建函式,len(),max(),min()
max(),min()函式的引數並不是乙個序列,而是以多個數值直接作為引數。
2.列表
列表是可變的。
2.1 list函式
因為字串不能用列表一樣被修改,所以有時候根據字串建立列表會很有用。
2.2 列表的基本操作
2.2.1 賦值
2.2.2 刪除元素
2.2.3 切片賦值
切片是乙個很強大的功能
假如把perl變成python該如何實現呢?
如何插入新的元素?
如何刪除元素?
留給大家想一下。
列表,元組是資料結構的基礎,需要花點時間夯實基礎。
一起學Python 元組
python的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括號,列表使用方括號。atuple et 77,99.9 atuple et 77,99.9 1 訪問元組 2 修改元組 說明 python中不允許修改元組的資料,包括不能刪除其中的元素。3 元組的內建函式count,index...
一起學python(三)
今天主要寫一下迴圈語句,while while else for in和for in else 1.while語句 語法 while 迴圈條件 執行語句 現在我們看一下示例如下所示 示例一 遍歷列表username username lisa nancy tom i 0 while i按照上面的 我...
一起學Python(四)
今天主要講一下,列表 字典 元組的增刪改查,以及合併 取值 1.增listdata listdata.insert len listdata 1,insertname print listdata 輸出結果為 name insertname 2.刪 listdata name 11,true lis...