python 系統學習筆記(四) list

2021-06-18 13:17:00 字數 4208 閱讀 2842

列表是一種用於儲存有序元素集合的資料結構,即你可以在列表中儲存元素序列。考慮乙個購物清單,上面有你需要購買的物品列表,只不過你可能希望以分號分隔他們而到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)  

print

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 用於檢...