標籤:
1、在python中,最基本的資料結構是序列,序列中每一個元素被分配一個序號,即元素的位置,稱為索引。索引從0開始,-1表示倒數第一個元素,-2表示倒數第二個元素,因此既可以是從前到後開始對元素進行訪問,也可以從後往前對元素進行訪問。
2、python序列中有6種內建的序列:列表、元組、字串、Unicode字串、buffer對象,xrange對象。其中有兩種常見類型:列表和元組。列表和元組的主要區別在於,列表可以修改,元組則不能。一般來說,在幾乎所有的情況下列表都可以替代元組。一個例外情況:使用元組作為字典的鍵。因為鍵不可修改,所以就不能使用列表。
3、列表中的各個元素通過逗號分隔,寫在方括弧中。
4、序列中也可以包含其他序列。
5、通用序列操作:索引、分區、加、乘、檢查某個元素是否屬於序列的成員、計算序列長度、找出最大元素、找出最小元素。
6、索引:序列中的所有元素都是有編號的,從0開始遞增,通過編號分別訪問。也可以從最後一個元素往前回溯訪問,最後一個元素的位置是-1。字串字面值也可以直接使用索引,而不需要一個變數來引用他們,兩者效果一樣。如果一個函數調用返回一個序列,那麼可以直接對返回結果進行索引操作。
7、分區:使用索引來訪問序列中的單個元素,使用分區則可以訪問一定範圍內的多個元素。分區操作需要提供兩個索引作為邊界,第1個索引的元素包含在該分區內,第2個索引則不包含在分區內。如何訪問最後一個元素?原序列中只有9個元素,索引從0到8使用number[6:8]無法擷取最後一個元素使用倒數法number[-3:-1]也無法擷取最後一個元素有兩種方法可以成行:①將後面一個邊界索引設定出範圍之外,比如number[6:9],將可以涵蓋第8個元素②直接省略後面一個邊界索引,比如number[6:],意思就是可以從第6個讀取直至最後一個同理也有:兩個邊界索引都空出的話,就可以讀出全部元素。另外,對於number[-3:0]出現[]空列表的結果,原因是前一個邊界索引元素必須在後一個索引元素左側,否則結果就是空。
8、為分區設定步長分區其實包含三個參數[邊界1:邊界2:步長]省略步長參數時,步長就取預設值1。步長為1就會便利邊界內的全部元素。步長大於1時就會間隔的取出元素。比如設定步長為2,就會每2個元素取出第一個元素,或者說是每隔1個元素取出1個元素。步長不能為0,但步長可以為負數,這樣就是倒著取,從右往左取數,相應的邊界索引之間不再是第一個索引元素必須在第2個索引左側的要求,而是:第一個索引元素需要在第二個索引元素的右側。比如:總結如下:①步長參數可以省略,省略後取預設值1;②步長為正時,從序列左側向右側取,結果也是這種順序排列;步長為負時,從序列右側向左側取,結果也是按照這種倒著的順序(相對於原序列來說)排列;③步長為正時,要求第一個索引元素必須在第二個索引元素的左側;步長為負時,要求第一個索引元素必須在第二個索引元素的右側;④不論是步長為正還是步長為負,第一個索引元素都會被取出,第二個索引元素都不會被取出。
9、序列相加:兩種
相同類型的序列可以進行相加操作。比如:字串與字串相加,列表與列表相加。字串與列表之間不能相加。
10、序列乘法:用數字x乘以一個序列會產生同類型的一個新序列,新序列中原序列會被重複x次。如果想初始化一個由10個元素的空序列,可以使用乘法來完成,這裡也要使用一個python內建的None值。None是表示什麼都沒有。記住python是區分大小寫。
11、成員存在檢查:檢查某個元素是否存在與一個序列中,使用in。若存在,返回true,若不存在則返回false。 上面兩個例子,一個可以用作許可權檢查,一個可以用作使用者名稱單檢查。下面寫一個使用者名稱密碼檢查:
12、長度、最小值、最大值:使用python內建函數len(),max(),min()來求序列的長度、最大值、最小值。如:
13、列表列表可以使用所有適用於序列的標準操作,如:索引、分區、相加、乘法,等等。列表區別與字串、元組等其他類型的序列的特徵是:列表是可以修改的。因此,列表有些特殊的操作:元素負值、元素刪除、分區賦值、列表方法。(1)list()函數:list()函數適用於所有類型的序列,而不只是字串。(2)列表賦值:列表賦值,不能為一個位置不存在的元素進行賦值。(3)刪除元素從列表中刪除元素,使用del語句來實現。(4)分區賦值上面的例子,使用list函數對name[7:]這一分區進行了賦值,一次改變了列表name中多個元素的值。①分區賦值也可以完成替換元素的操作。上面的例子是用等長的列表替代元列表中等長個數的元素,但是當替代列表沒有被替代的元素多時,就發生了直接替代的操作。正如這裡使用‘world‘和‘123‘對name列表進行替代的操作。②分區賦值也可以完成插入元素的操作。當沒有被替代的分區元素時,賦值就變成了直接插入元素。③分區賦值也可以完成刪除元素的操作。用一個空列表來給一個分區進行賦值,相當於直接刪除了該分區中的所有元素。這條語句的作用類似於del number[2:7]。(5)列表方法:appendappend方法用於在列表末尾追加新的對象。格式:對象.append(參數)只能有一個參數,是要追加到該對象的元素。(6)列表方法:countcount方法用於統計某個元素在列表中出現的次數(7)列表方法:extendextend方法主要用於使用一個列表擴充另一個列表。直接將list2擴充補充到list1的末尾。extend擴充操作與串連操作的不同之處在於:擴充操作修改了原有的列表,而串連操作會返回一個全新的列表。使用加法的串連操作並沒有改變原有的列表。(8)列表方法:indexindex方法主要用於從列表中找出某個值第一個匹配項的索引位置。index會搜素第一個‘aaa‘在列表中的位置,返回它的索引值。如果沒有搜尋到,換句話說,就是列表中沒有出現該對象,那麼久會報錯,產生異常。(9)列表方法:insertinsert方法用於將對象插入到列表中。 (10)列表方法:poppop方法用於從列表中移除一個元素,並且返回該元素的值。預設是移除最後一個元素。 如果不指定pop(參數)中的參數取值,那麼會自動移除最後一個,如果指定參數值,則會移除指定的那個元素。pop方法會返回要移除的那個元素,並完成從列表中的移除。pop相當於棧中的出棧,append相當於棧中的入棧。pop(0)可以實現隊列中的先進先出中的出。(11)列表方法:removeremove方法用於移除列表中某個值的第一個匹配項。 只有第一個匹配項會被移除。沒有傳回值,這是和pop的區別,當移除項不存在與列表中時,不會改變列表本身,並且會報錯。(12)列表方法:reversereverse方法將列表中的元素反向存放。如果只想將列表反向迭代輸出,並不改變列表本身,那麼可以用reversed()函數來完成(13)列表方法:sort對列表進行排序,並改變列表本身。字母和數字混在一起,是按照ASCII碼進行排序。如果想對列表進行排序,但又不改變列表本身。那麼有:
想通過賦值,將x.sort()結果賦值給y,但是y返回為空白。說明這種賦值是不可行的,因為sort方法不返回任何值。如果首先將x通過賦值,賦給y,再對y進行sort()方法,希望通過此法對y進行排序而不影響x本身。但是從結果看,對y的sort仍然影響到了x。原因是:通過y=x這種賦值形式,其實並沒有產生一個新的列表賦給y,而只是讓y指向了與x一樣的那個列表,即x和y都指向同一個列表。那麼對y進行排序操作,實質上也是和x共同指向的那個列表進行排序,所以也改變了x。這種讓x產生一個副本,對副本進行排序操作而不影響x本身的思路是正確的,只是賦值的形式不當。通過分區操作可以快速地將一個列表整體複製給另一個變數。另一種擷取已排序的列表副本而不影響列表本身的方法是使用sorted函數。sorted()是函數,不是方法。因此不能像x.sotred()使用。sorted()函數可以應用於任何序列。sort方法是預設的按照升序進行排序。如果需要自訂排序的方向,則可以使用內建函數cmp()來實現。cmp(x,y) 函數用於比較2個對象,如果x<y返回-1,如果x=y返回0,如果x>y返回1。sort方法還有另外兩個選擇性參數,key和reverse。
14、元組:元組和列表一樣都是序列,唯一的不同是元組不能修改。列表是通過方括弧括起來,而元組則是通過圓括弧括起來。空列表是[],空元組是()一個元素的元組(1,)-----也需要用一個逗號,逗號非常重要多個元素的元組(1,2,3,4)如果一個元素,寫成(1),那麼事實上它不是元組,是數1(1)tuple函數類似於列表中的list()函數使用tuple函數時,可以將字串、列表拆分形成元組。(2)建立元組使用tuple()函數建立列舉法建立(3)訪問元組與元組分區元組分區後還是元組。(4)一般情況下,在不改變其內容本身的時候,可以使用列表來代替元組。但是,在兩個情況下,元組是不可替代的。①元組在映射中可以當做鍵使用,但是列表不行。②元組作為很多內建函數和方法的傳回值存在。
15、小結:序列:一種資料結構,對其中的元素從0開始編號,編號為-1為倒數第一個元素。典型的序列是列表、字串、元組。其中列表是可以修改的,而字串和元組是不可以修改的,一旦建立就固定了。可以通過分區操作訪問序列的單個元素或者多個元素。分區需要指定起始位置和終止位置。起始位置元素包含在分區內,終止位置元素不包含在分區內。
python基礎教程學習筆記---(2)列表和元組