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,
輸出結果爲:app
class have 3 students The 3rd student in class is Tracy These students are : Bob Paul Tracy
關於上面的代碼有幾點要注意的是:函數
能夠往 class_list 中加入任何類型的對象,也就是說,並不要求一個 list 中的項目具備相同類型。你甚至能夠往 class_list 中插入一個list。code
排序函數做用於自己, 而不是返回一個副本,這與字符串類型是不一樣的,由於字符串不可修改。orm
print 函數的end關鍵字參數用來指定輸入完成以後的輸出,默認是換行符,上面的代碼用空格符替代換行符。對象
tuple 在用法與概念上與 list 沒有多大差異,能夠將 tuple 看作是一個只讀版list。也就是說tuple一經定義便不能被修改——不能添加和刪除對象,也不能修改tuple中的對象。排序
tuple中的項一樣應該用逗號分開,並用圓括號將這些項目括起來以表是是一個tuple。這個圓括號是可選的,也就是說能夠用如下兩種方式定義一個tuple:索引
t = 'Adam', 'Lisa', 'Bart' t = ('Adam', 'Lisa', 'Bart')
不過省掉那對圓括號不見得是什麼好的習慣。另外當tuple只有一個項時,第一項以後必須有一個逗號,該狀況下應該這樣定義t = ('Adam',)。這彷佛是一個古怪的約束,可是假如沒有這個逗號,不帶括號定義的tuple就變成了t = 'Adam'這明顯具備二義性。隊列
字典能夠看作是一組鍵-值(key-value)對的集合。鍵必須是惟一的,而每個鍵關聯着一個值。key必須是一個不可變的對象(如:tuple、數值型、字符串)。還要注意的是,在字典中的鍵值對並無以任何方式進行排序。ci
一個字典的定義應該照這樣的格式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 95 Lisa is 85 Adam is 95 Lisa's address is 85
上面介紹的三種內建數據結構都是序列,索引操做是序列的一個基本操做。經過下標操做能夠直接訪問序列中的對象。上面雖然已經演示了下標操做——隊列和元組用數字下標,字典用關鍵字下標。
序列的下標是從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組成的子序列。
集合是無序簡單對象的彙集。當你只關注一個對象是否存在於彙集中,而無論它存在的順序或在出現的次數時,則適宜用集合。基本功能:判斷是不是集合的成員、一個集合是否是另外一個集合的子集、獲取兩個集合的交集等等。實例:
s = set(['Adam', 'Lisa', 'Bart', 'Paul']) # 判斷對象是否在集合中 if 'Bart' in s: print "Bart is in ?", 'Bart' in s # 使用copy函數來拷貝一個set sc = s.copy() # 往集合中添加對象 sc.add('Bill') # 從集合中刪除對象 sc.remove('Adam') # 求兩個集合的交集,也可使用 s.intersection(sc) print s & sc
輸出的結果:
Bart is in ? True set(['Lisa', 'Paul', 'Bart'])