列表是一種用於儲存有序元素集合的資料結構,即你可以在列表中儲存元素序列。考慮乙個購物清單,上面有你需要購買的物品列表,只不過你可能希望以分號分隔他們而到python變成了逗號。
列表元素被包含在方括號中,這樣python就會才會明白你指定的是乙個列表。一旦列表建立完畢,我們可以對其元素進行新增,刪除和搜尋。正是因為可以執行新增和刪除操作,我們將列表稱作可變型別,即這種型別可以被修改。
物件和類的快速簡介
列表是使用物件和類的乙個例子。當我們對變數i賦值時,例如賦值5,這相當於建立乙個int類(型別)的物件(例項),你可以參看help(int)來更好的理解它。
乙個類還可以擁有字段,而字段只不過是專門應用與乙個類的變數而已。當你擁有對應類的物件時就能使用這些變數了。字段同樣利用點號訪問,如,mylist.field。
1、list:列表(即動態陣列,c++標準庫的vector,但可含不同型別的元素於乙個list中)
a = ["i","you","he","she"] #元素可為任何型別。
下標:按下標讀寫,就當作陣列處理
以0開始,有負下標的使用
0第乙個元素,-1最後乙個元素,
-len第乙個元素,len-1最後乙個元素
取list的元素數量
len(list) #list的長度。實際該方法是呼叫了此物件的__len__(self)方法。
建立連續的list
l = range(1,5) #即 l=[1,2,3,4],不含最後乙個元素
l = range(1, 10, 2) #即 l=[1, 3, 5, 7, 9]
定義list
li = [
"a",
"b",
"mpilgrim"
, "z"
, "example"]
向 list 中增加元素li
.("new")
li.insert(2
, "new")
li.extend
(["two"
, "elements"])
在這裡 list 中有 3 個元素 ('a'、'b' 和 'c'),並且使用另乙個有 3 個元素 ('d'、'e' 和 'f') 的 list 擴充套件之,因此新的 list 中有 6 個元素。
lists 也可以用 + 運算子連線起來。list = list + otherlist 相當於 list.extend(otherlist)。但 + 運算子把乙個新 (連線後) 的 list 作為值返回,而 extend 只修改存在的 list。也就是說,對於大型 list 來說,extend 的執行速度要快一些。
python 支援 += 運算子。li += ['two'] 等同於 li.extend(['two'])。+= 運算子可用於 list、字串和整數,並且它也可以被過載用於使用者自定義的類中 (更多關於類的內容參見 第 5 章)。
* 運算子可以作為乙個重複器作用於 list。li = [1, 2] * 3 等同於 li = [1, 2] + [1, 2] + [1, 2],即將三個 list 連線成乙個。
您可以通過指定 2 個索引得到 list的子集,叫做乙個 「slice」 。返回值是乙個新的 list,它包含了 list 中按順序從第乙個 slice 索引 (這裡為 li[1]) 開始,直到但是不包括第二個 slice 索引 (這裡為 li[3]) 的所有元素。
如果乙個或兩個 slice 索引是負數,slice 也可以工作。如果對您有幫助,您可以這樣理解:從左向右閱讀 list,第乙個 slice 索引指定了您想要的第乙個元素,第二個 slice 索引指定了第乙個您不想要的元素。返回的值為在其間的每個元素。
list 從 0 開始,所以 li[0:3] 返回 list 的前 3 個元素,從 li[0] 開始,直到但不包括 li[3]。
如果左側分片索引為 0,您可以將其省略,預設為 0。所以 li[:3] 同 「list 的分片 (slice)」 的 li[0:3] 是一樣的。
同樣的,如果右側分片索引是 list 的長度,可以將其省略。所以 li[3:] 同 li[3:5] 是一樣的,因為這個 list 有 5 個元素。
請注意這裡的對稱性。在這個包含 5 個元素的 list 中,li[:3] 返回前 3 個元素,而 li[3:] 返回後 2 個元素。實際上,li[:n] 總是返回前 n 個元素,而 li[n:] 將返回剩下的元素,不管 list 有多長。
如果將兩個分片索引全部省略,這將包括 list 的所有元素。但是與原始的名為 li 的 list 不同,它是乙個新 list,恰好擁有與 li 一樣的全部元素。li[:] 是生成乙個 list 完全拷貝的乙個簡寫。
檢索列表的值,四種方式:in、not in、count、index,後兩種方式是列表的方法。
示例列表:a_list = ['a','b','c','hello']:
判斷值是否在列表中,in操作符:
'a' in a_list //判斷值a是否在列表中,並返回true或false
判斷值是否不在列表,not in操作符:
'a' not in a_list
//判斷a是否不在列表中,並返回true或false
統計指定值在列表中出現的次數,count方法:
a_list.count('a') //返回a在列表中的出現的次數
檢視指定值在列表中的位置,index方法:
a_list.index('a')
//返回a在列表中每一次出現的位置,預設搜尋整個列表
a_list.index('a',0,3) //返回a在指定切片內第一次出現的位置
使用join鏈結list成為字串
params=
";".
join
(["%s=%s"
% (k, v
) fork,
v in
params
.items
()])
輸出'pwd=secret;database=master;uid=sa;server=mpilgrim
join 只能用於元素是字串的 list; 它不進行任何的型別強制轉換。連線乙個存在乙個或多個非字串元素的 list 將引發乙個異常。
利用list 傳引數
def a(b,c):
print b,c
a(1,2)
a(*[1,2])
a(**) #字典
list的對映解析
li = [1,
9, 8,
4]li = [elem*2
forelem
inli]
列表過濾
li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
print [elem for elem in li if len(elem) > 1]
print [elem for elem in li if elem != "b"]
print [elem for elem in li if li.count(elem) == 1]
練習題
1.刪除list裡面的重複元素,並對其排序,然後對裡面元素乘以2 並去掉大於10的元素
輸入input1=[1,3,5,1,7] input2=[2,3,8] input3=[3,4]
要求輸出 b=[2,4,6,8,10] ,其過程要求用函式實現 參考上一章可變引數可變(varargs)引數
舉例 一下是乙個簡單的求和
[python]view plain
copy
sum=
0a=[1,2
,3,4
] def
uniq(*nums):
global
sum
fornum
innums:
sum=num+sum
uniq(*a)
sum
提示過程,傳入元素為list的list 然後遍歷list 進行合併......
python 系統學習筆記(十一) sys
sys.startswith 是用來判斷乙個物件是以什麼開頭的,比如在python命令列輸入 abc startswith ab 就會返回true 問題 實現命令列讀引數讀檔案 python readfile.py c test.txt d test.txt python readfile.py h...
《訊號與系統學習筆記》 訊號與系統(四)
注 本部落格是基於奧本海姆 訊號與系統 第二版編寫,主要是為了自己學習的複習與加深。一 基本系統性質 一 記憶系統與無記憶系統 1 無記憶系統 如果對自變數的每乙個值,乙個系統的輸出僅僅取決於該時刻的輸入。1 乙個特別簡單的系統就是所謂的恒等系統,系統的輸出就是輸入。對連續時間恒等系統而言,其輸入輸...
linux系統學習筆記
一 軟體包安裝 原始碼包安裝 二進位製包安裝 二 rhel 7系統管理 使用systemctl命令管理服務 man命令幫助資訊 常用命令 reboot 用於重啟系統。格式為reboot,預設為系統管理員重啟 poweroff 用於關閉系統,其格式為poweroff,預設為系統管理員關閉 ps 用於檢...