日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python内置数据结构教程第四版答案_Python数据结构--内置数据结构

發布時間:2025/3/20 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python内置数据结构教程第四版答案_Python数据结构--内置数据结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文提到的所有內容均是基于Python 2.7,在Python 3.x的環境下可能并不完全適用

什么是數據結構

我們可以看一下在百度百科對于數據結構是怎么定義的:

數據結構是指相互之間存在著一種或多種關系的數據元素的集合和該集合中數據元素之間的關系組成。記為:

Data_Structure=(D,R)

其中D是數據元素的集合,R是該集合中所有元素之間的關系的有限集合。

---來自百度百科

我的理解是:數據結構是對于數據的特定組織形式,具體可分為物理結構和邏輯結構(區別)。

和數據結構經常一起出現的一個詞是算法。它們兩者之間有什么關系呢?實現一些特定算法是,應該(有時候是必須)采用某些數據結構來簡化計算。

知道了以上這些,接下來就一起來看看Python本身自帶的數據結構都有哪些吧?

List列表

定義:

a = [1,2,3] #最普通的一個數組

b = [1, 'Hello', 3.1415926] #多種類型混合組成的數組

c = [[[1],[2]],[[3],[4]]] #多層嵌套數組(這里是三層)

訪問:

list原則上是循秩訪問的,也就是說按下標訪問的。

a[0], a[1], a[-1] #訪問a的第一個,第二個元素,最后一個元素

a[1:3], a[-3:], a[:], a[:3] #這是list的切片(slice)操作,分別是訪問a的第2到3個元素(注意左右標的關系,包含起始位而不包含終止位),訪問倒數第3個元素到末尾,訪問整個數組,訪問第一個元素到第3個元素

a[::2], a[::-1]#分別是訪問a的從起始位開始的偶數位元素,逆序訪問a的元素

簡單總結一下,訪問單個元素的時候,直接在 '[]' 中輸入需要訪問元素的秩(下標)即可,這里的下標包括正常的排序(0,1,2...)和從末尾計數的排序(-1,-2,-3...),需要注意的是,如果訪問的秩并不在list范圍內,比如上面的list中的a=[1,2,3],如果訪問a[3]或者a[-6],就會引發一個IndexError。

訪問多個元素時,可以使用切片的方法,list[start, end, step], start和end分別是起始下標(默認值為0和list長度減一),step為訪問步長,即每隔幾個元素訪問一個元素(默認值為1)。需要注意的是,切片時下標越界的話并不會引發任何錯誤,比如上面的list中的a,如果訪問a[1:10000],和a[-10000:]會返回[2,3]和[1,2,3]而不會引發任何錯誤。這是和按下標訪問時的一個區別。

更新:

#a=[1,2,3]

a[2] = 4 #修改單個元素,此時a=[1,2,4]

a[1:3] = [8,24] #修改多個元素此時a=[1,8,24]

a[1:3] = [1,2,3,4] #a=[1,1,2,3,4]

a.append(1) #a=[1,1,2,3,4,1]

a.extend([1,2,3]) #在a后面添加一個list,a=[1,1,2,3,4,1,1,2,3]

a.insert(0,1) #在a中0的位置上插入1,a=[1,1,1,2,3,4,1,1,2,3]

刪除:

#a=[1,2,3]

#類似更新的操作方法

a = a[:1] + a[2:] #a=[1,3] 相當于刪除了a[1]

#其他刪除方法

#a=[1,2,3]

del a[1] #刪除a[1]

a.remove(1) #刪除a[1]

a.pop() #彈出a的最后一個元素,和上面兩者不同的是,該方法返回值是彈出的元素

其他操作

#a=[1,1,2,3,4]

a.count(1) #計算a中1的個數,返回2

a.index(1) #返回元素1在a中第一次出現的位置下標

a.index(7) #由于a中沒有7,故引發ValueError

a.reverse() #a=[4,3,2,1,1]將a逆轉

a.sort(), sorted(a) #返回排序好的a 這個方法list.sort(cmp, key, reverse)三個參數為別為比較方法,比較的鍵,是否逆序,sort和sorted的區別在于一個是對原list排序,而另一個是將排好序的結果返回

len(a) #返回a的長度,這里是5

a*2 #返回[1,1,2,3,4,1,1,2,3,4]

max(a),min(a) #分別返回a中的最大值和最小值,這里是4和1

列表推導式:

a = [x for x in range(3)] #a=[0,1,2]

b = [x for x in range(10) if x%2==1] #b=[1,3,5,7,9]

filter,map,reduce:

a = [1,2,3,4,5,6,7]

b = filter(lambda x: x>3, a) #b=[4,5,6,7]

c = map(lambda x:x*x, a) #c=[1,4,9,16,25,36,49]

d = filter(lambda x,y:x+y, a) #d=28

list去重:

#方法1:利用set,不保證去重之后的結果順序

a = list(set(a))

#方法2:利用dict,不保證順序

a = {}.fromkeys(a).keys()

#方法3:利用set,保持順序

a = list(set(a)).sort(key=a.index)

#列表推導式

b = []

[b.append(i) for i in a and i not in b]

合并兩個有序鏈表:

#方法一:遞歸法

def _recursion_merge_sort2(l1, l2, tmp):

if len(l1) == 0 or len(l2) == 0:

tmp.extend(l1)

tmp.extend(l2)

return tmp

else:

if l1[0] < l2[0]:

tmp.append(l1[0])

del l1[0]

elif l1[0] >= l2[0]:

tmp.append(l2[0])

del l2[0]

return _recursion_merge_sort2(l1, l2, tmp)

def recursion_merge_sort2(l1, l2):

return _recursion_merge_sort2(l1, l2, [])

#方法二:迭代法

def loop_merge_sort(l1, l2):

tmp = []

while len(l1) > 0 and len(l2) > 0:

if l1[0] < l2[0]:

tmp.append(l1[0])

del l1[0]

else:

tmp.append(l2[0])

del l2[0]

tmp.extend(l1)

tmp.extend(l2)

return tmp

tuple元組

定義&訪問:

a = (1, ) #當元組只含一個元素時,

a = (1, 3.14, 'Hello') #元祖中可以包含不同類型的元素

a[0] #返回a的第一個元素

a[0:2] #返回a的第1,2個元素

a[0:2:-1] #返回a的第1,2個元素,并逆序

a.count(1) #返回1

a.index(1) #返回3.14

min(a),max(a) #返回1,3.14

可以發現,元組的定義,訪問和list列表幾乎一樣(除了單個元組聲明時需要加逗號)

那么tuple和list有什么區別呢?

區別在于tuple不支持修改,也就是類似于 a[0] = 1 的操作對于元組而言是非法的。不可變的意義在于使tuple內的數據更安全,不可修改。

Wait!元組真的完全不可修改嗎?定義上來講元組內的所有元素一旦定義就不可修改,但如果針對元組內的某一個元素進行修改的話是否可行呢?

a = (1,2,[1,2])

a[2][0] = 3 #a=(1,2,[3, 2])

注意!!!以上操作僅供演示,在元組中的元素不應該進行修改,如果需要頻繁的修改,建議使用列表。

dict字典

定義&訪問&修改:

a = {1:1, 2:2} #字典是一個key->value的對應關系,原則上key可以是任何不可變類型的值(數字,字符串,元組)

a[1], a[7],a.get(7) #第一個返回1,第二個引發KeyError,第三個返回None,實際中推薦使用get的安全訪問方法

a[1] = 3 #a={1:3, 2:2}

a[7] = 7 #a={1:3,2:2,7:7}

a.pop(1) #a={2:2, 7:7}

dict 的優勢在于利用了哈希策略,是的對于dict的元素插入,查找速度快(O(1)),弊端在于有一定的空間浪費和無序性。

而list的的插入和查找速度慢于dict(O(n)),但空間利用率好于dict。

set集合

類似dict,但只有key而沒有value,特點是無序性和互異性。

a = set([1,1,2,3]) #返回set([1,2,3])

a.add(4) #set([1,2,3,4])

a.remove(2) #set([1,3,4])

a = set([1,2,3])

b = set([2,3,4])

c = a&b #c = set([2,3])

d = a|b #d = set([1,2,3,4])

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的python内置数据结构教程第四版答案_Python数据结构--内置数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。