標籤:shell 引號 注意 列表 數學 長度 不能 mod 情況
List
Python內建的一種資料類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。
比如:
>>> classmates = [‘Michael‘,‘Bob‘,‘Tracy‘]
>>> classmates
[‘Michael‘, ‘Bob‘, ‘Tracy‘]
>>> len(classmates)
3
用索引來訪問list中的每一個位置的元素,索引從0開始:
>>> classmates[0]‘Michael‘>>> classmates[3]Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> classmates[3]IndexError: list index out of range>>>
如果要取得最後一個元素,除了計算索引位置外,還可以用-1做索引,用-1做索引直接取得list的最後一個元素:
>>> classmates[-1]‘Tracy‘>>>
以此類推,可以擷取倒數第2個,倒數第3個:
>>> classmates[-2]‘Bob‘>>> classmates[-3]‘Michael‘>>> classmates[-4]Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> classmates[-4]IndexError: list index out of range>>>
list是一個可變的有序表,所以可以向list中追加元素到末尾:
>>> classmates.append("A")>>> classmates[‘Michael‘, ‘Bob‘, ‘Tracy‘, ‘A‘]
也可以把元素插入到指定的位置,比如索引號為1的位置:
>>> classmates[‘Michael‘, ‘Bob‘, ‘Tracy‘, ‘A‘]>>> classmates.insert(1,"B")>>> classmates[‘Michael‘, ‘B‘, ‘Bob‘, ‘Tracy‘, ‘A‘]
要刪除list末尾的元素,用pop(i)的方法,其中i是索引的位置:
>>> classmates[‘Michael‘, ‘B‘, ‘Bob‘, ‘Tracy‘, ‘A‘]>>> classmates.pop(1)‘B‘>>> classmates[‘Michael‘, ‘Bob‘, ‘Tracy‘, ‘A‘]
要把某個元素替換成別的元素,可以直接賦值給對應的索引位置:
>>> classmates[‘Michael‘, ‘Bob‘, ‘Tracy‘, ‘A‘]>>> classmates[3] = "Sarah">>> classmates[‘Michael‘, ‘Bob‘, ‘Tracy‘, ‘Sarah‘]
list裡面的元素的資料類型也可以不相同,比如:
>>> L = [‘A‘,45,True,3.45]>>> L[‘A‘, 45, True, 3.45]
list的元素也可以包含另一個list,比如:
>>> M = [‘D‘,L]>>> M[‘D‘, [‘A‘, 45, True, 3.45]]
要注意M只有兩個元素,M[1]又是一個list:
>>> len(M)2>>> len(M[1])4
如果一個list中一個元素也沒有,就是一個空的list,它的長度為0:
>>> N = []>>> len(N)0
Tuple
Python中另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改:
>>> classmates = (‘A‘,‘B‘,‘C‘)>>> classmates(‘A‘, ‘B‘, ‘C‘)
現在,classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他擷取元素的方法和list是一樣的,也可以使用classmates[0],classmates[-1],但是不能賦值成另外的元素。
那麼,不可變的tuple有什麼意義?因為tuple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量使用tuple。
tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來,比如:
>>> t = (1,2)>>> t(1, 2)
如果要定義一個空的tuple,可以寫成():
>>> t = ()>>> t()
但是,要定義一個只有1個元素的tuple,如果你像如下這麼定義:
>>> t = (1)>>> t1
那麼你定義的就不是一個tuple,是1這個數,因為括弧()既可以表示tuple,又可以表示數學公式中的小括弧。
這就產生了歧義,因此Python規定,這種情況下,按小括弧計算。
所以,只有一個元素的tuple定義時必須加上一個逗號“,”,來消除歧義:
>>> t = (1,)>>> t(1,)
Python在顯示只有一個元素的tuple時,也會加上一個逗號“,”,以免你誤解成數學計算意義上的括弧。
“可變的”tuple:
>>> t = (‘a‘,‘b‘,[‘A‘,‘B‘])>>> t(‘a‘, ‘b‘, [‘A‘, ‘B‘])>>> t[2][0] = ‘X‘>>> t[2][1] = ‘Y‘>>> t(‘a‘, ‘b‘, [‘X‘, ‘Y‘])
這個tuple定義的時候有三個元素,表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的不變是說,tuple的每個元素指向永遠不變,如指向一個list,就不能改成指向其他對象,但是這個list本事是可變的。
總結
list和tuple是Python內建的有序集合,前者可變,後者不可變。
Python基礎教程-List和Tuple