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:
而當我們需要複製一個新的獨立的列表,我們可以使用此示例中的預設切片,會產生原列表的副本