Python的元組和列表

xjpans發表於2017-12-22

1、list

列表是Python內建的一種資料,list是一種有序的集合,可隨時新增或者刪除其中的元素。

舉例:

列出一個班級所有同學的姓名,便可以使用一個列表表示:

>>> classmates = ['zhangsan','lisi','wanger']

>>> classmates

['zhangsan','lisi','wanger']

此時的變數classmates便是一個list,用len()函式可以獲取list元素的個數

>>>len(classmates)

3

通過索引來訪問list中每一個位置的元素,索引是從0開始的

>>> classmates[0]
'zhangsan'
>>> classmates[1]
'lisi'
>>> classmates[2]
'wanger'
>>> 

當索引超出範圍時,python報出IndexError的錯誤,因此要確保索引不要越界,記住最後一個元素的索引是len(classmates) -1.

如果要取得最後一個元素,除了計算索引位置外,還可以用-1直接取得最後一個元素

>>> classmates[-1]
'wanger'

以此類推:

>>> classmates[-1]
'wanger'
>>> classmates[-2]
'lisi'
>>> classmates[-3]
'zhangsan'
>>> classmates[-4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> 
#第四個越界咯,此乃報錯資訊。

追加元素的末尾:

list是一個可變的有序表,因此可以往list中追加元素的末尾

>>> classmates.append('mazi')
>>> classmates
['zhangsan', 'lisi', 'wanger', 'mazi']
>>> 

也可以把元素插入到指定的位置,比如索引號為1的位置:

>>> classmates.insert(1,'ergouzi')
>>> classmates
['zhangsan', 'ergouzi', 'lisi', 'wanger', 'mazi']
>>> 
  #為什麼二狗子在第二個呢?記住索引是從0開始的。

要刪除列表末尾的元素,用pop()方法:

>>> classmates
['zhangsan', 'ergouzi', 'lisi', 'wanger', 'mazi']
>>> classmates.pop()
'mazi'
>>> classmates
['zhangsan', 'ergouzi', 'lisi', 'wanger']
>>> 
#列表中最後一個的麻子被刪除了。

刪除指定位置的元素,用pop(i)方法,i是指索引位置:

>>> classmates
['zhangsan', 'ergouzi', 'lisi', 'wanger']
>>> classmates.pop(2)
'lisi'
>>> classmates
['zhangsan', 'ergouzi', 'wanger']
>>> 
  #指定位置的lisi被刪除。

若要替換元素,直接給對應的索引位置賦值即可:

>>> classmates
['zhangsan', 'ergouzi', 'wanger']
>>> classmates[2] = "goudan"
>>> classmates
['zhangsan', 'ergouzi', 'goudan']
>>> 
   #王二被替換成狗蛋。

list內的元素的資料型別可以是不同的,例如:

>>> B = ['book',234,True]
>>> B
['book', 234, True]
>>> 

list中的元素可以是另一個list,例如:

>>> C = ['java','perl',['php','C'],'python']
>>> len(C)
4

>>>

C中只有4個元素,其中C(2)還是一個list,分解開更容易理解:

>>> d = ['php','C']
>>> C = ['java','perl',d,'python']
>>> 

要拿到php可以寫d[1]或者C[2][1],可以看成一個二維陣列,類似還有三維和四維陣列

如果list中一個元素也沒有,則是一個空list,它的長度為0


元組(tuple)

另一種有序列表就是元組了。元組和列表類似,但是元組一旦初始化便不可再次修改,例如同樣列出一個班級同學們的名字:

>>> classmates = ('zhangsan','lisi','wanger')
>>> 
  #注意[]變成()了

現在classmates這個元組是不能變了,它沒有append(),insert()這樣的方法,但獲取元素的方法和列表是一樣的,可以正常的使用classmates[0],classmates[-1],但不能賦值成另外的元素。

因元組不可變,因此程式碼更安全,如果可能,儘量使用tuple代替list。

注意:當定義一個tuple時,tuple元素必須被確定下來:

>>> n = (1,2)
>>> n
(1, 2)
>>> 

定義一個空tuple,可以寫成():

>>>n = ()

只定義一個元素的tuple,要寫成:

>>>n = (1,)

>>>n

1,

>>>   #為什麼要加一個逗號呢?因為定義的不是元組,二十1這個數!括號()這個東西,既可以表示元組,又可以表示數學公式的小括號,這便產生了歧義,因此在python中規定,這樣的情況按小括號進行計算,結果自然為1,所以,只有一個元素的元組定義時必須加上逗號,來消除歧義。python在顯示一個元素的時候,也會自動加上一個逗號,避免你誤會成數學計算意義上的括號。

“可變的”元組:

>>> p = ('a','b',['A','B'])

>>> p[2][0] = 'x'
>>> p[2][1] = 'y'
>>> p
('a', 'b', ['x', 'y'])
>>> 

以上元組定義了三個元素,有‘a’,'b'和一個列表。那它是怎麼變的呢?下面上圖:

當修改列表中的元素後,元組變成了:


表面上元組的元素是變了,其實變的是列表的元素。








相關文章