python list,tuple,dict,set

list

list是可變有序元素集合,通過方括號定義,例如:

list_t=[0,1,2,3,4]

>>> list_t
[0, 1, 2, 3, 4]

>>> isinstance(list_t,list)
True

list

list長途通過len()函數獲取:

>>> len(list_t)
5
list通過下標獲取單個元素,注意下標從0開始:

>>> list_t[0]
0

下標越界的話,會出錯:

>>> list_t[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

可以通過-1下標獲取倒數第一個元素,-2倒數第二個元素,依次類推:

>>> list_t[-1]
4
>>> list_t[-5]
0
>>> list_t[-6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

pop從指定位置獲取,並刪除元素:

>>> list_t.pop(1)
1
>>> list_t
[0, 2, 3, 4]

insert在指定位置插入數據:

>>> list_t.insert(1,1)
>>> list_t
[0, 1, 2, 3, 4]

指定超過list長度的位置插入,默認在list的末尾插入:

>>> list_t.insert(10,10)
>>> list_t
[0, 1, 2, 3, 4, 10]

覆蓋更新指定位置:

>>> list_t[1]=10
>>> list_t
[0, 10, 2, 3, 4]

list中的元素也可以是list:

>>> list_t=[0,[1,2,3],4,5]
>>> list_t
[0, [1, 2, 3], 4, 5]
>>> isinstance(list_t,list)
True

同樣通過下標訪問:

>>> list_t[1]
[1, 2, 3]
>>> list_t[1][0]
1

tuple

tuple是不可變的元素集合。不可變體現在2個方面:元素個數不變,元素內容不變。

tuple通過小括號定義:

>>> tuple_t=(0,1,2)
>>> tuple_t
(0, 1, 2)
>>> isinstance(tuple_t,tuple)
True

通過元素下標訪問,下標從0開始:

>>> tuple_t[0]
0

不可更新:

>>> tuple_t[1]=10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

定義一個元素時,需要在元素後加上逗號,以表明是定義一個tuple,而不是小括號對:

>>> tuple_t=(0,)
>>> isinstance(tuple_t,tuple)
True
>>> tuple_t=(0)
>>> isinstance(tuple_t,tuple)
False

理解元素的不變性:

>>> p=[0,1,2]
>>> tuple_t=(3,p,4)
>>> tuple_t
(3, [0, 1, 2], 4)
>>> tuple_t[1][0]=10
>>> tuple_t
(3, [10, 1, 2], 4)
>>> isinstance(tuple_t,tuple)
True
這裏通過tuple_t[1][0]對p[0]進行賦值,改變了p[0]的值。但是tuple_t[1]的值本身並沒有改變。可以理解爲tuple_t[1]存儲的是對象的指針。這個指針指向了p。指針沒有變,僅僅是指針指向的內容發生了變化。

可以定義空的tuple,雖然看不出有什麼意義:

>>> tuple_t=()
>>> tuple_t
()
>>> isinstance(tuple_t,tuple)
True

dict

dict存儲key:value形式的鍵值對,寫入順序與存儲順序不一定相同。檢索性能優秀,是對key進行hash以確定value的存儲地址,快速的找到value值。內存佔用大,屬於以空間換時間。存取自由,與list相反,如果在list中間插入數據的話,可想要將其後的元素都往後挪一位耗費巨大。

使用花括號定義:
>>> dict_t={'key1':'value1','key2':'value2'}
>>> dict_t
{'key2': 'value2', 'key1': 'value1'}
>>> isinstance(dict_t,dict)
True

key需要使用不變值,注意下面的定義,已經將key1轉爲對應的string作爲key存儲。順便注意下輸入順序與存儲順序不同:

>>> key1='mk1'
>>> dict_t={key1:'value1','key2':'value2'}
>>> dict_t
{'key2': 'value2', 'mk1': 'value1'}

使用key獲取元素value

>>> dict_t[key1]
'value1'
>>> dict_t['mk1']
'value1'

使用key複製以及新增:

>>> dict_t['key2']='v2'
>>> dict_t['key3']='v3'
>>> dict_t
{'key2': 'v2', 'key3': 'v3', 'mk1': 'value1'}

for循環獲取全部值:

>>> for k in dict_t:
...     print("%s:%s" % (k,dict_t[k]))
...
key2:v2
mk1:value1
key3:v3

使用pop()獲取一個key時,並刪除:

>>> dict_t.pop('key2')
'v2'
>>> dict_t
{'mk1': 'value1', 'key3': 'v3'}

獲取不存在的key時,會報錯。爲避免出錯,可在獲取時,先用in進行校驗,或者通過get()方法返回空或默認值:

>>> dict_t['key2']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'key2'
>>> 'key2' in dict_t
False
>>> dict_t.get('key3')
'v3'
>>> dict_t.get('key2',-1)
-1
>>> dict_t.get('key2')
>>>

set

set只保存key,並且key不能重複。定義時需要輸入list參數:

>>> set_t=set([0,1,2,3])
>>> set_t
{0, 1, 2, 3}

但是set不能通過下標訪問,這是因爲set是與dict本質上相同的,並不是按照輸入順序存儲的數組,是按照key大小排列的。

>>> set_t[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

通過add方法添加可以,remove()方法刪除

>>> set_t.add(4)
>>> set_t
{0, 1, 2, 3, 4}
>>> set_t.remove(0)
>>> set_t
{1, 2, 3, 4}

pop方法刪除隊首一個元素:

>>> set_t=set([5,0,7,2])
>>> set_t.pop()
0
>>> set_t
{2, 5, 7}

兩個set可以做交併差:
>>> set_t
{2, 5, 7}
>>> set_t1=set([3,6,7])
>>> set_t - set_t1
{2, 5}
>>> set_t & set_t1
{7}
>>> set_t | set_t1
{2, 3, 5, 6, 7}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章