標籤:分區 索引 rac mat one 相加 out append none
列表是最常用的Python資料類型
建立一個列表
>>> l = [1, 2, 3, 4, 5 ]>>> l[1, 2, 3, 4, 5]
>>> l = []>>> l[]
>>> l = list()>>> l[]
- 列表不是數組,列表中的資料項目不需要具有相同的類型
>>> l = [‘Apple‘, 123, True]>>> l[‘Apple‘, 123, True]
- 把range()產生的內容轉換成list,range()的範圍是從左邊的數字到右邊的數字,包含左邊的數字,不包含右邊的數字
>>> l = list(range(12, 19))>>> l[12, 13, 14, 15, 16, 17, 18]
訪問列表中的值
>>> l = [‘physics‘, ‘chemistry‘, 1997, 2000]>>> l[0]‘physics‘
- 當索引超出了範圍時,Python會報一個IndexError錯誤,所以,要確保索引不要越界。
>>> l = [1, 2, 3, 4, 5, 6, 7 ]>>> l[10]Traceback (most recent call last):File "<stdin>", line 1, in <module>IndexError: list index out of range
- 列表的索引下標是從0開始,表示列表從左向右數第一個資料,即列表第一個資料; 負下標是從-1開始,表示從右向左數,第一個資料,即列表最後一個資料。
>>> l = [1, 2, 3, 4, 5, 6, 7]>>> l[0]1>>> l[-1]7
更新列表
list是一個可變的有序表,所以,可以往list中追加元素:
- 追加元素至末尾:用append()函數添加:
>>> l = [1,2, 3, 4, 5 ]>>> l.append(6)>>> l[1, 2, 3, 4, 5, 6]
- 把元素插入到指定的位置,比如索引號為1的位置:用insert()函數添加:
>>> l = [1,2, 3, 4, 5 ]>>> l.insert(1, ‘Jack‘)>>> l[1, ‘Jack‘, 2, 3, 4, 5]
刪除列表元素
- 可以使用 del 語句來刪除列表的元素,del list[i],i為索引位置,如下執行個體:
>>> l = [‘physics‘, ‘chemistry‘, 1997, 2000]>>> l[‘physics‘, ‘chemistry‘, 1997, 2000]>>> del l[2]>>> l[‘physics‘, ‘chemistry‘, 2000]
- 要刪除list末尾的元素,用pop()方法,pop()方法傳回值為刪除的內容:
>>> l = [1, 2, 3, 4, 5 ]>>> value = l.pop()>>> l[1, 2, 3, 4]>>> value5
- 要刪除指定位置的元素,用pop(i)方法,其中i是索引位置,pop(i)方法傳回值為刪除的內容:
>>> l = [1, 2, 3, 4, 5]>>> val = l.pop(2)>>> l[1, 2, 4, 5]>>> val3
- 還有一個remove() 函數是用於移除列表中某個值的第一個匹配項。
>>> l = [123, ‘xyz‘, ‘zara‘, ‘abc‘, ‘xyz‘]>>> l.remove(‘xyz‘)>>> l[123, ‘zara‘, ‘abc‘, ‘xyz‘]
- 清空列表元素,用clear()方法,清空列表所有的元素,獲得一個空列表
>>> l = [1, 2, 3, 4, 5]>>> l[1, 2, 3, 4, 5]>>> l.clear()>>> l[]
其他清單元素
- 要把某個元素替換成別的元素,可以直接賦值給對應的索引位置:
>>> classmates = [‘Michael‘, ‘Bob‘, ‘Tracy‘]>>> classmates[1] = ‘Sarah‘>>> classmates[‘Michael‘, ‘Sarah‘, ‘Tracy‘]
雙層列表
>>> l = [‘python‘, ‘java‘, [‘asp‘, ‘php‘], ‘scheme‘]>>> len(l)4
- 要注意s只有4個元素,其中s[2]又是一個list,如果拆開寫就更容易理解了:
>>> s = [‘asp‘, ‘php‘]>>> l = [‘phthon‘, ‘java‘, s, ‘scheme‘]>>> l[‘phthon‘, ‘java‘, [‘asp‘, ‘php‘], ‘scheme‘]
- 要拿到‘php‘可以寫p[1]或者s[2][1],因此s可以看成是一個二維數組,類似的還有三維、四維……數組,不過很少用到。
- 列表的拷貝:
- 淺拷貝:只拷貝父物件,不會拷貝對象的內部的子物件
>>> a = [1,2,3, [10, 20, 30]]>>> b = a.copy()>>> a[2] = 77>>> a[3][2] = 666>>> a[1, 2, 77, [10, 20, 666]]>>> b[1, 2, 3, [10, 20, 666]]
>>> import copy>>> a = [1,2,3, [10, 20, 30]]>>> b = copy.copy(a)>>> a[2] = 77>>> a[3][2] = 666>>> a[1, 2, 77, [10, 20, 666]]>>> b[1, 2, 3, [10, 20, 666]]
- 深拷貝:拷貝對象及其子物件
>>> import copy>>> a = [1,2,3, [10, 20, 30]]>>> b = copy.deepcopy(a)>>> a[2] = 77>>> a[3][2] = 666>>> a[1, 2, 77, [10, 20, 666]]>>> b[1, 2, 3, [10, 20, 30]]
列表截取(分區操作)
- 截取的範圍,包含左邊的下標值,不包含右邊的下標值
>>> l = [1, 2, 3, 4, 5, 6, 7 ]>>> l[1:4][2, 3, 4]
- 下標值可以不寫,如果不寫,左邊下標值預設為0,右邊下標值為最大加一,即表示截取到最後一個資料
>>> l = [1, 2, 3, 4, 5, 6, 7 ]>>> l[:][1, 2, 3, 4, 5, 6, 7]>>> l[:4][1, 2, 3, 4]>>> l[2:][3, 4, 5, 6, 7]
>>> l = [1, 2, 3, 4, 5, 6, 7 ]>>> l[1:6:1][2, 3, 4, 5, 6]>>> l[1:6:2][2, 4, 6]
>>> l = [1, 2, 3, 4, 5, 6, 7 ]>>> l[-2:-4][]>>> l[-4:-2][4, 5]>>> l[-1:-5:-1][7, 6, 5, 4]>>> l[-1:-5:-2][7, 5]>>> l[::-1][7, 6, 5, 4, 3, 2, 1]
列表的遍曆
>>> l = [1,2,3,4,5]>>> for i in l:... print(i)... 12345
>>> a = [1,2,3,4,5,6]>>> length = len(a)>>> indx = 0>>> while indx < length:... print(a[indx])... indx += 1... 123456
>>> l = [["one", 1, "eins"], ["two", 2,"zwei"], ["three", 3,"drei"] ]>>> for k,v,w in l:... print(k, "--", v, "--",w)... one -- 1 -- einstwo -- 2 -- zweithree -- 3 -- drei
列表內涵
>>> a = [‘a‘, ‘b‘, ‘c‘]>>> b = [i for i in a]>>> b[‘a‘, ‘b‘, ‘c‘]
>>> a = [1, 2, 3, 4, 5]>>> b = [i*10 for i in a]>>> b[10, 20, 30, 40, 50]
>>> a = range(1, 51)>>> b = [i for i in a if i % 2 == 0]>>> b[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
>>> a = [i for i in range(1,4)]>>> a[1, 2, 3]>>> b = [i for i in range(100,400) if i % 100 == 0]>>> b[100, 200, 300]>>> c = [ m+n for m in a for n in b]>>> c[101, 201, 301, 102, 202, 302, 103, 203, 303]>>> c = [ m+n for m in a for n in b if m+n < 250]>>> c[101, 201, 102, 202, 103, 203]
列表指令碼操作符
- 列表對 + 和 * 的操作符與字串相似。+ 號用於組合列表,* 號用於重複列表。
>>> a = [1,2,3,4,5]>>> b = [5,6,7,8,9]>>> d = [‘a‘, ‘b‘, ‘c‘]>>> c = a + b + d>>> c[1, 2, 3, 4, 5, 5, 6, 7, 8, 9, ‘a‘, ‘b‘, ‘c‘]
- 使用 * 巨集指令清單,相當於把n個列表拼接在一起
>>> a = [1,2,3,4,5]>>> b = a *3>>> b[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> a = [1,2,3,4,5]>>> 3 in aTrue>>> 7 in aFalse
列表函數
- cmp(list1, list2) : 比較兩個列表的元素
- len(list) : 返回列表元素的個數
- max(list) : 返回列表元素的最大值
- min(list) : 返回列表元素的最小值
list(seq) : 將可hash的資料轉化為列表
列表方法:
- list.append(obj) : 在列表末尾添加新的對象
- list.count(obj) : 統計某個元素在列表中出現的次數
- list.extend(seq) :在列表末尾一次性追加另一個序列中的多個值
- list.index(obj) : 從列表中找到某個值第一個匹配值的索引位置
- list.insert(index, obj) : 將對象插入列表
- list.pop(index = -1) : 移除列表中的一個元素(預設是最後一個元素),並且返回改元素的值
- list.remove(obj) : 移除列表中某個值的第一個匹配項
- list.reverse() : 反向類表中元素
list.sort(cmp = None, key = None, reverse = False) : 對原列表進行排序
字串與列表的相互轉換
- 字串轉列表(split()函數)
>>> str1 = "hi hello world">>> str1.split(" ")[‘hi‘, ‘hello‘, ‘world‘]
>>> str1 = "hi hello world">>> list(str1)[‘h‘, ‘i‘, ‘ ‘, ‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘ ‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘]
- 列錶轉字串(join()函數)
>>> l = ["hi","hello","world"]>>> " ".join(l)‘hi hello world‘
Python List類型