03 Python的核心資料型別 列表

2021-08-15 07:01:39 字數 3686 閱讀 8811

python的列表物件是這個語言提供的最通用的序列。列表是乙個任意型別的物件的位置相關的有序集合,它沒有固定大小。不像字串,其大小是可變的,通過對偏移量進行複製以及其他各種列表的方法進行呼叫,確實能夠修改列表的大小。

我們可以定義乙個列表:它擁有三個不同的元素:

>>> l = [123, 'spam', 1.23]

>>> len(l)

3

我們能夠對列表進行索引、切片等操作,就像對字串所做的操作一樣

>>> l[0]     #根據索引獲取元素

123>>> l[:-1] #切片操作,返回乙個新的列表

[123, 'spam']

>>> l + [4, 5, 6] #新增元素

[123, 'spam', 1.23, 4, 5, 6]

>>> l #我們並沒有改變原列表

[123, 'spam', 1.23]

序號

函式注釋

1在列表末尾新增新元素

2list.count(obj)

統計某個元素在列表中出現的次數

3list.extend(seq)

在列表末尾一次性追加另乙個序列中的多個值

4list.index(obj)

從列表中查詢第一次出現該元素的索引

5list.insert(index,obj)

將物件插入列表

6list.pop(obj)

移除列表中最後乙個元素並返回該元素的值

7list.remove(obj)

移除指定元素

8list.reverse()

反轉列表中的元素

9list.sort(func)

對元列表進行排序

10cmp(list1, list2)

比較兩個列表的元素

11len(list)

列表元素的個數

12max(list)

返回列表元素的最大值

13min(list)

返回列表元素的最小值

14list(seq)

將元組轉化為列表

>>> l

[123, 'spam', 1.23]

>>> l

[123, 'spam', 1.23, 'niu']

>>> l.pop(2) # 彈出後將從原列表中移除該元素

1.23

>>> l

[123, 'spam', 'niu']

>>> l.insert(1,'chen') #對指定位置進行插入操作

>>> l

[123, 'chen', 'spam', 'niu']

>>> l.remove('chen') #刪除指定元素

>>> l

[123, 'spam', 'niu']

>>> l.count('spam')

1>>> l

[123, 'spam', 'niu', 'spam']

>>> l.count('spam') #計算指定元素的個數

2>>> l.reverse() #反轉

>>> l

['spam', 'niu', 'spam', 123]

>>> m = [1, 5, 6, 2, 0, 3]

>>> m.sort() #排序

>>> m

[0, 1, 2, 3, 5, 6]

python核心資料型別的乙個優秀特性就是他們支援任意的巢狀。能夠以任意的組合對其進行巢狀,並可以對個層次進行巢狀(例如,能夠讓乙個列表包含乙個字典,並且這個字典中包含另乙個列表等)

>>> m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  #定義乙個巢狀列表【二維列表】

>>> m

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>> m[1]

[4, 5, 6]

>>> m[1][2] #取第一行第二個元素(從0開始算起)

6

處理序列的操作和列表的方法中,python還包括了乙個更高階的操作,稱為列表解析表示式。它提供了一種處理矩陣這樣結構的強大工具,例如,我們要從矩陣中取出第二列:

# m = 1,2,3

# 4,5,6

# 7,8,9

>>> col2 = [row[1] for row in m] #收集第二列

>>> col2

[2, 5, 8]

>>> m

[[1, 2, 3], [4, 5, 6], [7, 8, 9]] #元列表未改變

實際上操作的含義是:使用for迴圈遍歷m,row變數為每一行,再取出每一行的第乙個元素。

把矩陣m的每個row中的row[1],放在乙個新的列表中。其結果就是乙個包含了矩陣的第二列的新列表。

列表解析源自集合的概念,它是一種通過對序列中的每一項執行乙個表示式來建立乙個新序列的方法,每次乙個,從左至右。列表解析是編寫在方括號中的(提醒你在建立列表這個事實),並且由使用了同乙個變數名的(這裡是row)表示式和迴圈結構組成。

更複雜一些:

>>> m

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>> [row[1] + 1

for row in m] #取出元素+1

[3, 6, 9]

>>> [row[1] for row in m if row[1] % 2 == 0] #取出偶數

[2, 8]

列表解析建立了新的列表作為結果,但是能夠在任何可迭代的物件上進行迭代。例如,這裡我們將會使用列表解析去步進最表的乙個硬編碼列表和乙個字串。

>>> diag = [m[i][i] for i in [0, 1, 2]] #遍歷陣列,得到0,1,2 賦值給i

>>> diag

[1, 5, 9]

>>> doubles = [c * 2

for c in

'spam'] #重複字串

>>> doubles

['ss', 'pp', 'aa', 'mm']

解析緣分可以用來建立產生所需結果的生成器(例如內建的sum函式,按照一種順序彙總各項):

>>> g = (sum(row) for row in m)  #返回的是迭代器型別

>>> next(g)

6>>> next(g)

15>>> next(g)

24

內建函式map可以做類似的事情,產生對各項執行乙個函式的結果:

>>> list(map(sum,m))

[6, 15, 24]

解析語法也可以用來建立列表、集合和字典:

>>>   #建立集合

>>> #建立字典

>>> [ord(x) for x in

'spaam'] #獲取每個字元的ascii碼,整合乙個list

[115, 112, 97, 97, 109]

>>> #獲取每個字元的ascii碼,整合乙個set

>>> #獲取每個字元的ascii碼,整合乙個字典

python核心資料型別

序列運算子 本文採用版本pyton3.5 數字 int,long,float,complex,bool 字元 str,unicode 列表 list 字典 dict 元組 tuple 檔案 file 其他型別 集合 set frozenset,類型別,none str repr 或format 將非...

03 Python資料型別之字典

字典是無序的鍵 值對 key value對 集合,鍵必須是互不相同的 在同乙個字典之內 使用大括號建立乙個空的字典 初始化列表時,在大括號內放置一組逗號分隔的鍵 值對,這也是字典輸出的方式。字典的主要操作時依據鍵來儲存和取值。也可以用del來刪除鍵 值對 key value 從乙個不存在的鍵中取值會...

Python核心資料型別 概覽

python的核心資料型別有 數字,字串,列表,字典,元組,檔案等。物件型別 例子 可變性 數字345,3.45,345l,3 4j 不可變字串 spam eggs 不可變列表 1,a b 2 可變字典 可變元組 1,2,spam 不可變檔案 myfile open data r w 內建函式var...