1. 程式人生 > >Python學習之路(2)——標準資料型別續——列表,元組,字典,集合

Python學習之路(2)——標準資料型別續——列表,元組,字典,集合

0.Python之禪

可以通過在python直譯器中輸入import this 檢視python應該注意的一些規範與原則,如下:

1.列表

元素用方括號括起,元素之間用逗號隔開,如[1,2,3,4]

三大特點:

(1)異構性

列表裡想裝啥就裝啥,即:他可以包含不同種類、任意型別的物件,甚至可以巢狀列表

示例:

執行結果:

(2)有序性

列表裡裝的元素都是有順序的,可以按照位置序號獲取單個元素,也可以用分片的方法來進行多個連續元素的獲取

訪問元素的方法:

a.索引

與其他語言中陣列的索引訪問方式相似,告訴位置即可,並且位置從0開始

不同於其他語言中的陣列:python提供了負數索引,-1指定倒數第一個位置,-2,-3類推

示例:

執行結果:

b.切片

在方括號中指定要使用的第一個元素和最後一個元素的索引,中間用冒號隔開,如list[1:3] ,注意此處說的是索引,即冒號兩邊的是索引,所以是從0開始的

還有以下常見做法:

《1》如果省略掉終止索引,就表示一直擷取到末尾:

《2》如果省略掉起始索引,就表示從起始元素就開始擷取:

《3》可以使用負索引,也就是從右往左的索引,最右側是-1,向左依次為-2,-3

《4》要跳著擷取,就需要多加一個冒號,第三個引數表示跳的步長,如list[0:5:2]

示例:

執行結果:

同時由示例可以注意到:當採用索引區間時,冒號右邊的位置的值不會被包含

           跳著擷取時,下一個元素的值為(前一個元素的位置+步長)的位置的值

疑問:如果對截取出的分片進行修改,會影響到原始的列表嗎?

示例:

執行結果:

對原始列表進行切片,產生一個全新的列表,用變數獲取該切片,實質上是獲取了list分片的新的獨立拷貝,所以對a的修改不會影響原始列表

(3)本地可修改

列表的大小和內容可以隨意改變,在插入、刪除、修改列表元素時,不需要建立一份新的列表拷貝,而是在原來的記憶體地址上直接修改列表物件

a.修改元素

索引賦值

與索引訪問列表元素相似,直接給索引訪問的值賦值,如list[0]=8

切片賦值:

list[1:3]=[1,2,3]

示例:

執行結果:

所以由上述示例可以看出,切片賦值,與右邊界和=右邊的賦值個數無關,本質是先刪除切片位置的元素,再在該切片位置新增指定元素,

並且由list1可以看出,刪除的時候也沒有刪除右邊界的值,所以切片始終是左閉右開

b.新增元素

append()    -------------------   在列表的末尾新增元素

insert()       -------------------   在列表的任何位置新增新元素,需要指定索引和值,插入是就地修改,而不是返回修改後的新列表

extend()     -------------------   在尾部一次性新增多個元素,需要將多個以列表形式傳入

示例:

執行結果:

c.刪除元素

del list[0]               ----------------------------     刪除指定元素,刪除後無法再訪問

pop()                  ----------------------------  刪除末尾的元素,並且可以接受它的返回值,也可以不接收,在括號中傳入索引時,就是刪除指

                                                                     定索引處的元素

remove(值)   ------------------------------   刪除指定值第一次出現的位置的元素,如果要刪除的值可能在列表中出現多次,就需要使用迴圈                                                        來刪除所有,使用remove可以接收它刪除的值,也可以不接收

示例:

執行結果:

d.元素排序

sort()     -------------------------    成員函式,本地修改,對原列表進行永久性修改排列順序,是按內建的規則排序,比如數字按照從小到大,

              字母按照字典中字母順序,不能獲取返回值,相當於C++中的引用修改

sorted()    ----------------------     全域性函式,臨時修改,對原列表不改變,通過它的返回值使用它

    上述兩個函式都可以通過傳入引數reverse=True來進行反向排序

reverse()  ----------------------    成員函式,本地修改,對原列表進行修改,只是按照元素的位置進行翻轉,不能獲取返回值,
                                                但可通過再次呼叫reserve()

示例:

執行結果:

操作列表

(1)獲取列表的長度-------len(list)

(2)對數字列表進行簡單的統計計算

min()      -------------------求最小值

max()     -------------------求最大值

sum()     -------------------對列表中的數字求和

示例:

執行結果:

(3)列表解析——用一行生成程式碼

變數名=[使用迴圈變數的式子 for 迴圈變數 in  range()]

這裡的for迴圈不需要冒號

示例:

執行結果:

(4)遍歷切片

可以使用切片來遍歷列表中的部分元素

示例:

執行結果:

(5)複製列表

示例1:

執行結果1:

可以看出如果直接將一個列表賦給一個變數,此時這個變數只是這個列表的別名,如num2只是num1的別名,對num2進行修改,num1會同樣變化,因為本質它們指向同一個列表

示例2:

執行結果2:

而當我們需要複製一個新的獨立的列表,我們可以使用此示例中的預設切片,會產生原列表的副本

 

2.元組

3.字典

4.集合