python 基礎-使用list(列表)、dict、set、可變與不可變對象


參考鏈接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017104324028448

dict是字典,可以儲存鍵值對類型的值,set與dict相同,只是set只儲存key值,而不儲存value。

補充:

  python中數值類型(int、float)、元組str是不可變對象,而列表list、字典dict、集合set是可變對象

  list.cout('a')查看list中'a'的個數

>>> l
['a', 2]
>>> l.count('a')

List

  問題:list index out of range 和 list assignment index out of range的原因

>>> a=[[],[],[1]]
>>> a[0][-1]=5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range#是再下標溢出的情況下依舊分配值的時候出現的異常
>>> a[0][-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range#是訪問的下標超出了list的地址
>>> a[0][1]=5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> a[0][1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>

  

 

dict

  

a={'sex':'nan'}
>>> 'sex' in a#默認在key中檢查
True
>>> 'nan' in a
False
>>> 'sex' in a.values()
False
>>> 'nan' in a.values()
True
>>> 'sex' in a.keys()
True
>>>

  

  dict又稱map,他以鍵值對的形式儲存數據,並且為了查找方便,在存儲數據的時候,會根據key的值去計算應該放置的位置。為了保證計算位置的算法的結果不沖突,所以就要求dict數據的key值不能重復。由於這種特性,使得在查找數據時,與list的從頭開始查找相比,dict中儲存的數據查找時極快的,但是對空間有些浪費,因為常規情況下的帶儲存數據經過算法處理后,並不會無間隔的緊密的按順序放置在內存中,而是分散的。

  dict內部存放的順序和key放入的順序是完全沒有關系的

  dict的key必須是不可變對象,因為dict內使用hash計算key存放的位置,如果每次計算相同的key得出的結果不同,就會造成key的混亂,如果用可變對象當作key,會報錯

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

  

dict的一些方法和特性

  一個key只能對應一個value

  可以通過in判斷是否存在(只匹配key,不匹配value)

>>> l={'a':'1','b':'2'}
>>> 'a' in l     
True             
>>> '1' in l     
False            

  還可以通過 get() 方法獲取指定key的內容,若key不存在,返回None,或者返回自己指定的內容

>>> l.get('a')
'1'
>>> l.get('1')#返回None
>>> l.get('1',aaa)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'aaa' is not defined#因為必須寫“aaa”
>>> l.get('1',1111)
1111
>>>

  使用 pop(key) 方法刪除指定的key值

  使用remove()刪除list中的index

  參考鏈接:https://blog.csdn.net/u013066730/article/details/85260764

  使用dict一定要注意,dict的key一定是不可變對象,在Python中,字符串、整數等都是不可變的,而list是可變的。

list與dict的區別:

  兩者之間的區別主要在於查找速度和對儲存的使用率上面

  1)list的查找速度會隨着存放數據的數量的增加而增加,但占用的內存小,浪費內存還小。

  2)dict的查找速度極快,不會受存放數據數量大小的影響,但占用內存大,浪費空間多。

 

set

   set 和dict類似,也是一組 key 的集合,但不儲存 value ,同樣的key不能重復。

  使用一個list作為輸入創建set

>>> s=set([1,2,'a'])#注意創建時傳入的參數是一個list
>>> s
{1, 2, 'a'}#這樣顯示並不代表set是有序的
>>> s=set([1,2,'a','a']) 
>>> s 
{1, 2, 'a'} #不重復
>>>

  使用 add(key) 添加 key 到 set 中

>>> s.add('b')
>>> s.add('a')#重復添加沒有效果
>>> s
{1, 2, 'a', 'b'}

  使用 romove(key) 刪除

 set 可以看作為數學意義上的一個集合,這個集合中的元素是無序的、是不重復的,可以做數學意義上的交集、並集操作。

>>> b=set([3,4,'d'])
>>> s&b#交集
set()
>>> b
{'d', 3, 4}
>>> s|b#並集
{1, 2, 'a', 3, 4, 'b', 'd'}
>>>

  不能添加可變元素,注意:tuple雖然是不可變元素,但是包含可變元素的tuble也不行

>>> b.add([5,6])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
AttributeError: 'tuple' object has no attribute 'add'
>>> b.add((1,2,[3,4]))#tuple中包含了可變元素list
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>

  

   

可變與不可變對象

  不可變對象就是雖然看起來對他的改變會生效,是因為其返回一個新的對象。如

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

  而可變對象如 list 

>>> l=[1,2]
>>> l
[1, 2]
>>> l[0]='a'
>>> l
['a', 2]
>>>

  

  所以,對於不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會創建新的對象並返回,這樣,就保證了不可變對象本身永遠是不可變的。

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM