Python(四)語法(list有序可變列表,tuple有序不可變列表,dict字典【MAP】,set)
list
Python內建的一種資料型別是列表:list。list是一種有序的集合,可以隨時新增和刪除其中的元素。
>>> list=[0,1,2,3,4,5]
>>> list
[0, 1, 2, 3, 4, 5]
獲取list長度
>>> len(list)
5
用索引來訪問list中每一個位置的元素,記得索引是從0
開始的
>>> list[0]
1
索引為負數時從後往前取值
>>> list[-1]
5
>>> list[-2]
4
新增元素list是一個可變的有序表,所以,可以往list中追加元素到末尾
>>> list.append(6)
>>> list
[1, 2, 3, 4, 5, 6]
把元素插入到指定的位置,比如索引號為0的位置插入數字0
>>> list.insert(0,0)
>>> list
[0, 1, 2, 3, 4, 5, 6]
刪除list末尾的元素,用pop()
方法
>>> list.pop()
6
>>> list
[0, 1, 2, 3, 4, 5]
刪除指定位置的元素,用pop(i)
方法,其中i
是索引位置
>>> list.pop(5) 5 >>> list [0, 1, 2, 3, 4]
替換指定位置的元素,可以直接賦值給對應的索引位置
>>> list
[0, 1, 2, 3, 4]
>>> list[0]=1
>>> list
[1, 1, 2, 3, 4]
list中的元素不一定要是同一型別
>>> list
[1, 1, 2, 3, 4]
>>> list[0]="abc"
>>> list
['abc', 1, 2, 3, 4]
list元素也可以是另一個list,取值的時候可以list[i][i]類似於二維陣列
>>> a=['a','b','c'] >>> a ['a', 'b', 'c'] >>> list[0]=a >>> list [['a', 'b', 'c'], 1, 2, 3, 4] >>> list[0] ['a', 'b', 'c'] >>> list[0][0] 'a'
tuple
另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改
不可變的tuple有什麼意義?因為tuple不可變,所以程式碼更安全。如果可能,能用tuple代替list就儘量用tuple
如下tuple不能變了,它也沒有append(),insert()這樣的方法。其他獲取元素的方法和list是一樣的
>>> list=(1,2,3,4)
>>> list
(1, 2, 3, 4)
>>> list[1]
2
>>> list[-1]
4
>>> list[1]=0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> list.append(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
空的tuple
>>> list=()
>>> list
()
一個元素的tuple要注意一定要加逗號","。這是因為括號()
既可以表示tuple,又可以表示數學公式中的小括號,這就產生了歧義,因此,Python規定,這種情況下,按小括號進行計算
>>> list=(1)
>>> list
1
>>> list=(1,)
>>> list
(1,)
>>>
當然tuple內部的物件是可以改變的 如下
>>> list=(1,2,[3,4,5])
>>> list
(1, 2, [3, 4, 5])
>>> list[2][0]=1
>>> list
(1, 2, [1, 4, 5])
>>>
表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向'a'
,就不能改成指向'b'
,指向一個list,就不能改成指向其他物件,但指向的這個list本身是可變的!
dict---->MAP
Python內建了字典:dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)儲存,具有極快的查詢速度
>>> map={'key1':1,'key2':2,'key3':3}
>>> map
{'key1': 1, 'key2': 2, 'key3': 3}
新增元素
>>> map['key4']=4
>>> map
{'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4}
取值
map[key]:如果key不存在會報錯
map.get(key) :如果key不存在返回none 注意:返回None
的時候Python的互動環境不顯示結果,但在在編譯器中會顯示none
>>> map
{'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4}
>>> map['key5']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'key5'
>>> 'key5' in map
False
>>> 'key4' in map
True
>>> map.get('key4')
4
>>> map.get('key5')
>>>
刪除 pop(key)
>>> map.pop('key4')
4
>>> map
{'key1': 1, 'key2': 2, 'key3': 3}
和list比較,dict有以下幾個特點:
- 查詢和插入的速度極快,不會隨著key的增加而變慢;
- 需要佔用大量的記憶體,記憶體浪費多。
list:
- 查詢和插入的時間隨著元素的增加而增加;
- 佔用空間小,浪費記憶體很少。
所以,dict是用空間來換取時間的一種方法
set
set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。
要建立一個set,需要提供一個list作為輸入集合
>>> s=set([3,2,3,1,3,2])
>>> s
{1, 2, 3}
注意:傳入的引數[3,2,3,1,3,2]
是一個list,而顯示的{1, 2, 3}
只是告訴你這個set內部有1,2,3這3個元素,顯示的順序也不表示set是有序的。重複元素在set中自動被過濾
通過add(key)
方法可以新增元素到set中,可以重複新增,但不會有效果
>>> s
{1, 2, 3}
>>> s.add(3)
>>> s
{1, 2, 3}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>>
通過remove(key)
方法可以刪除元素,刪除沒有的元素會報錯
{1, 2, 3, 4}
>>> s.remove(1)
>>> s
{2, 3, 4}
>>> s.remove(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
set可以看成數學意義上的無序和無重複元素的集合,因此,兩個set可以做數學意義上的交集、並集等操作
>>> a=set([1,2,3])
>>> b=set([3,4,5])
>>> a&b
{3}
>>> a|b
{1, 2, 3, 4, 5}