1. 程式人生 > >python-列表list和元組tuple

python-列表list和元組tuple

在資料型別和變數中我們提到,python除了整數,浮點數,字串等資料型別外,還包含列表,字典等資料型別,今天我們來學習列表和元組這兩種資料型別。

1.list

list是一種有序的集合,可以隨時新增和刪除其中的元素,有點類似與C/C++中的陣列。例如,列出班級中所有同學的名字,就可以使用list表示:

>>> classmates = ['Michael','Bob','Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
>>> len(classmates)
3

變數classmates就是一個list。如上我們可以使用len()函式來獲得list元素的個數。

我們可以使用索引來訪問list中每一個位置的元素,索引是從0開始,這點也和陣列非常相似。

>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    classmates[3]
IndexError: list index out of range

當索引超出範圍時,會報錯。由於索引從0開始,故最後一個元素的索引為元素個數n-1

假如元素個數非常多,而我們只想取後面幾個元素,這時如果還採用前述方法,笨重且容易出錯,我們可以採用負數作為索引,直接獲取後面的元素,例如-1獲取最後一個元素,以此類推:

>>> classmates[-1]
'Tracy'
>>> classmates[-2]
'Bob'
>>> classmates[-3]
'Michael'

list是一個可變的有序表,可以追加元素到末尾,插入元素到指定位置,刪除指定元素,刪除末尾元素等。

追加元素到末尾,使用.append()函式,例:

>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

插入元素至指定位置,使用.insert()函式,例如插入到元素1後:

>>> classmates.insert(1,'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

刪除指定元素,使用pop函式,例刪除末尾元素:

>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']

刪除指定元素,例如刪除第一個元素:

>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']

另外,list裡面的元素和陣列一樣,可以包含不同的資料型別,其中的元素也可以是另外一個list。例如:

>>> L = ['apple',123,True]
>>> L = ['apple',123,True]
>>> s = ['abc','bcd',['art','lg'],'ght']
>>> len(s)
4

注意,s 中只有4個元素,因為s[2]是一個list.那麼如何取到s[2]中的元素,或者怎麼對這些元素進行操作呢?

此時我們可以看成是一個二維陣列,我們看下面的例子:

>>> p = ['bcd','jht']
>>> s = ['abc','python',p,'omd']
>>> s[1]
'python'
>>> s[2]
['bcd', 'jht']
>>> s[2][1]
'jht'

2.tuple

tuple和list非常類似,但是tuple一旦初始化就不能改變,它沒有append(),insert()這樣的方法,但仍可正常的使用classmates[0],classmates[1]去查詢獲取元素。因為tuple的不可更改,故你定義一個tuple時就必須把元素確定下來,否則則定義了一個空的tuple。例如:

>>> classmates = ('abc','bcd','def')
>>> classmates[1]
'bcd'
>>> t = (1,2)
>>> t
(1, 2)
>>> t =()
>>> t
()

另外,還需注意的是,如果你定義一個元素的tuple,你必須在元素後面加一個逗號“,”,因為括號既可以表示tuple,,也可以表示數學公式中的小括號,這就產生了歧義,python規定,使用逗號來消除這種歧義。例:

>>> t = (1)
>>> t
1
>>> t = (1,)
>>> t
(1,)

最後,我們在來看一個例子:

>>> t = ('a','b',['x','y'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

我們看到tuple中的元素變了!!!!!不是說不能改變嗎????

其實,tuple所說的元素不可變,是指每個元素的指向不可變,元素0指向’a‘,就不能改成指向’b‘,指向一個list(例子中為['x','y'])就不能指向別的其他物件,但是,指向的這個list是可變的啊!一定要理解計算機的儲存方式。下圖是一個示意圖(轉載自廖雪峰網站):