Python內建資料結構詳解

來源:互聯網
上載者:User
本文給大家匯總介紹了Python中的5種內建資料結構以及操作樣本,非常的詳細,有需要的小夥伴可以參考下。

一、列表(List)

list 是一個可以在其中儲存一系列項目的資料結構。list 的項目之間需用逗號分開,並用一對中括弧括將所有的項目括起來,以表明這是一個 list 。下例用以展示 list 的一些基本操作:

# 定義一個 list 對象 class_list:class_list = ['Michael', 'Bob', 'Tracy']# 獲得一個 class_list 的長度print 'class have', len(class_list), 'students'# 訪問class_list中的對象print 'The 3rd student in class is', class_list[2]# 往 class_list 中插入對象class_list.append('Paul')# 從 class_list 中刪除一個項目del class_list[0]# 對 class_list 進行排序class_list.sort()# 遍曆整個class_list中的項目print 'These students are :',for student in class_list:  print student,

輸出結果為:

class have 3 students
The 3rd student in class is Tracy
These students are : Bob Paul Tracy

關於上面的代碼有幾點要注意的是:

可以往 class_list 中加入任何類型的對象,也就是說,並不要求一個 list 中的項目具有相同類型。你甚至可以往 class_list 中插入一個list。
排序函數作用於本身, 而不是返回一個副本,這與字串類型是不同的,因為字串不可修改。
print 函數的end關鍵字參數用來指定輸入完成之後的輸出,預設是分行符號,上面的代碼用空格符替代分行符號。

二、元組(Tuple)

tuple 在用法與概念上與 list 沒有多大差別,可以將 tuple 看做是一個唯讀版list。也就是說tuple一經定義便不能被修改——不能添加和刪除對象,也不能修改tuple中的對象。

tuple中的項同樣應該用逗號分開,並用圓括弧將這些項目括起來以表是是一個tuple。這個圓括弧是可選的,也就是說可以用以下兩種方式定義一個tuple:

t = 'Adam', 'Lisa', 'Bart'
t = ('Adam', 'Lisa', 'Bart')
不過省掉那對圓括弧不見得是什麼好的習慣。另外當tuple只有一個項時,第一項之後必須有一個逗號,該情況下應該這樣定義t = ('Adam',)。這似乎是一個古怪的約束,但是假如沒有這個逗號,不帶括弧定義的tuple就變成了t = 'Adam'這明顯具有二義性。

三、字典(Dictionary)

字典可以看做是一組鍵-值(key-value)對的集合。鍵必須是唯一的,而每一個鍵關聯著一個值。key必須是一個不可變的對象(如:tuple、數值型、字串)。還要注意的是,在字典中的索引值對並沒有以任何方式進行排序。

一個字典的定義應該照這樣的格式d={key1 : value1, key2 : value2, key3 : value3}。鍵和值之間用冒號分隔,而索引值對之間用逗號相隔,再用大括弧將所有的索引值對括起來。一些基本操作如下:

# 字典的定義d = {  'Adam': 95,  'Lisa': 85,  'Bart': 59}# 通過鍵來擷取值print "Adam's score is", d['Adam']# 刪除一個索引值對del d['Bart']# 遍曆字典for name, score in d.items():  print '{0} is {1}'.format(name, score)# 往字典中增加一個索引值對d['Paul'] = 72# 判斷字典中是否存在某鍵,也可以用 if ab.has_key('Lisa')if 'Lisa' in d:  print "Lisa's address is", d['Lisa']

輸出的結果為:

Adam's score is 95Lisa is 85Adam is 95Lisa's address is 85

四、序列(Sequences)

上面介紹的三種內建資料結構都是序列,索引操作是序列的一個基本操作。通過下標操作可以直接存取序列中的對象。上面雖然已經示範了下標操作——隊列和元組用數字下標,字典用關鍵字下標。

序列的下標是從0開始的,上面的例子中只使用了下標為正數的情況,其實下標還可以為負數,如-1,-2,-3…。負數下標表示的意義為反方向的位置,如class_list[-1]返回的是class_list的倒數第一個項目。

序列不但支援負數下標還支援雙下標,這對雙下標表示一個區間。如class_list[0:3]返回的是一個class_list中從下標為1到下標為3之前的子序列副本。注意這個區間是一對半閉半開的區間。這種操作被稱作切片操作(slicing operation)。如果切片操作的第二個下標超出了序列的範圍,那麼切片操作會到序列的末尾終止。切片操作中的兩個下標都有預設值,第一個的預設值為0,第二個的大小為序列的長度。

還可以給切片操作提供第三個參數,第三個參數代表切片操作的步長,它的預設值是1。步長代表了項與項之間的間距,比方name[0:10:3],返回的就是name中下標為0,3,6,9組成的子序列。

五、集合(Set)

集合是無序簡單對象的聚集。當你只關注一個對象是否存在於聚集中,而不管它存在的順序或在出現的次數時,則適宜用集合。準系統:判斷是否是集合的成員、一個集合是不是另一個集合的子集、擷取兩個集合的交集等等。執行個體:

s = set(['Adam', 'Lisa', 'Bart', 'Paul'])# 判斷對象是否在集合中if 'Bart' in s:  print "Bart is in ?", 'Bart' in s# 使用copy函數來拷貝一個setsc = s.copy()# 往集合中添加對象sc.add('Bill')# 從集合中刪除對象sc.remove('Adam')# 求兩個集合的交集,也可以使用 s.intersection(sc)print s & sc

輸出的結果:

Bart is in ? Trueset(['Lisa', 'Paul', 'Bart'])

相關推薦:

從局部變數和全域變數開始全面解析Python中變數的範圍

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.