天天看點

python list,tuple,dict,setlisttupledictset

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]

下标越界的話,會出錯:

>>> 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]

>>> 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]

不可更新:

>>> 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()

>>> 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}