天天看點

Python 元組、清單

Python中,最常用的資料結構就是序列了。序列有以下幾種:元組,清單,字元串等。注:代碼都是在IDE中編輯的,沒有用互動式環境。

一、元組(tuple)

元組其實有點類似C++中的數組,即一旦指定了内容,那麼這個元組就固定下來不能變了。不過并不是絕對不能改變,如果一個元組成員是一個清單,那麼這個清單的修改操作是允許的。另外,Python是動态語言,是以元組中各個成員并不需要是同一種類型:

a = (1, 3, 5, [7, 9])
# a[1] = 11 錯誤,不允許修改元組的成員
a[3].append(11)# 正确
print a      
(1, 3, 5, [7, 9, 11])      

大部分時候,清單可以代替元組,不過,元組可以作為字典中的key,而清單不可以;另外,元組是許多内建函數的傳回類型

二、清單(list)

清單與元組非常相似,他們支援的操作也有很多相似的地方,具體功能我們在一部分再介紹。清單用[ ]來表示,不同之處在于,清單可以随意修改元素以及添加元素:

a = [1, 3, 5, [7, 9]]
a[1] = 111
a[3].append(11)
print a

[1, 111, 5, [7, 9, 11]]      

三、序列支援的操作

1、索引

類似于C++中的數組和std::list<T>,序列都是線性結構,支援使用下标來進行索引:

a = [1, 3, 5]
b = (2, 4 ,6)
c = 'this is a string'
print a[1], b[1], c[1], c[-1]

3 4 h g      

同其他語言一樣,下标是從0開始計的,即第一個元素的索引為0。此外,索引可以為負數,即從右側開始計算。

2、分片

分片操作支援每次通路一定區間的元素,以及指定通路的步長:

a = [1, 3, 5, 7, 9]
b = (2, 4, 6, 8, 10)
print a[1:3], b[0:4:2] #注意,左閉右開區間      

同樣,分片操作也可以是負數,不過要注意步長是否比對。

3、加法和乘法

加法會連接配接兩個類型相同的序列(不能是元組),乘法會指派N次該序列,并傳回一個新的序列:

a = [1, 3, 5, 7, 9]
b = [2, 4, 6, 8, 10]
print a + b, '\n', a * 2

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

4、長度、最大最小值

len()函數傳回元素的個數,max()和min()函數傳回。對于長度,他們都調用類内定義的__len__方法。

四、清單支援的操作

簡單點說,清單主要支援的就是添加/删除元素,以及索引、統計、排序等操作:

a = [1, 3, 11, 13, 9, 7, 5]
b = [22, 44]
a.append(111) # a = [1, 3, 11, 13, 9, 7, 5, 111]
a.count(1) # 1
a.extend(b) # a = [1, 3, 11, 13, 9, 7, 5, 111, 22, 44]
a.index(3) # 1
a.insert(1, 666) # a = [1, 666, 3, 11, 13, 9, 7, 5, 111, 22, 44]
a.pop() # a = [1, 666, 3, 11, 13, 9, 7, 5, 111, 22]
a.remove(5) # a = [1, 666, 3, 11, 13, 9, 7, 111, 22]
a.reverse()# a = [22, 111, 7, 9, 13, 11, 3, 666, 1]
a.sort() # a = [1, 3, 7, 9, 11, 13, 22, 111, 666]