1. 程式人生 > >Python(四)語法(list有序可變列表,tuple有序不可變列表,dict字典【MAP】,set)

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有以下幾個特點:

  1. 查詢和插入的速度極快,不會隨著key的增加而變慢;
  2. 需要佔用大量的記憶體,記憶體浪費多。

list:

  1. 查詢和插入的時間隨著元素的增加而增加;
  2. 佔用空間小,浪費記憶體很少。

所以,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}