python中的數據類型之元組和字典
一、元組:俗稱不可變的列表,又被稱為只讀列表。元組用小括號括起來,裏面可以放任何數據類型的數據,查詢可以,循環也可以,切片也可以,但就是不能修改。
註意:如果元組中只有一個元素,一定要加一個逗號,否則就不是元組。
>>> tu = (1,"Tanxu","A") #創建一個元組,用小括號括起來 >>> type(tu) <class ‘tuple‘> >>> tu1 = ("Tanxu")#當小括號內只有一個元素時,不是元組 >>> type(tu1) <class ‘str‘> >>> tu2 = ("Tanxu",)#元組只有一個元素時,要在該元素後加一個逗號 >>> type(tu2) <class ‘tuple‘> >>> tu3 = ()#定義一個空元組 >>> type(tu3) <class ‘tuple‘>
註意:關於不可變,這裏元組不可變的意思是子元素不可變【即元組沒有修改操作】,而子元素內部的子元素可以改變,這取決於子元素是否是可變對象。【但是元組本身沒有改變】
>>> tu[2] = "Tan" #對元祖進行修改會報錯 Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> tu[2] = "Tan" TypeError: ‘tuple‘ object does not support item assignment >>> tu4 = ("Tan","xu",[89,93,94]) >>> tu4[2][2] = 98 #可以對元素中子元素的子元素進行修改 >>> tu4 (‘Tan‘, ‘xu‘, [89, 93, 98])
元組也有count、index、len等操作,用法同列表
二、字典:字典是以{}括起來的,內部使用key:value的形式來保存數據。如{“jay”:”周傑倫”,”jj”:”林俊傑”}
註意:字典的key必須是可哈希的,不可變的【列表是不可哈希的】
補充:什麽是可哈希的(hashable)不該改變的(imutable)?【來自官方文檔翻譯】
如果一個對象在自己的生命周期中有一哈希值(hash value)是不可改變的,那麽它就是可哈希的(hashable)的,因為這些數據結構內置了哈希值,每個可哈希的對象都內置了__hash__方法,所以可哈希的對象可以通過哈希值進行對比,也可以作為字典的鍵值和作為set函數的參數。所有python中所有不可改變的的對象(imutable objects)都是可哈希的,比如字符串,元組,也就是說可改變的容器如字典,列表不可哈希(unhashable)。我們用戶所定義的類的實例對象默認是可哈希的(hashable),它們都是唯一的,而hash值也就是它們的id()。
>>> dic1 = {‘name‘:‘Tanxu‘,‘sex‘:‘女‘,‘age‘:18} >>> type(dic1) <class ‘dict‘>
1、字典的相關操作:
1)增加:
>>> dic1 = {‘name‘:‘Tanxu‘,‘sex‘:‘女‘,‘age‘:18} >>> dic1[‘height‘] = 160 #直接添加,如果key重復了,會替換掉原來的value >>> dic1 {‘name‘: ‘Tanxu‘, ‘sex‘: ‘女‘, ‘age‘: 18, ‘height‘: 160} >>> dic1.setdefault(‘weight‘,45)#使用setdefault()添加元素時,返回的是value值;如果字典中存在了這個key,則不再進行保存操作 45 >>> dic1 {‘name‘: ‘Tanxu‘, ‘sex‘: ‘女‘, ‘age‘: 18, ‘height‘: 160, ‘weight‘: 45}
2)刪除:
>>> dic1.pop("weight")#刪除一個元素,會返回這個元素對應的value值 45 >>> dic1.popitem()#刪除一個元素,返回這個元素的key和value,返回的是一個元組。默認刪除最後一個元素 (‘height‘, 160)
>>> dic1.clear()#清空字典
>>> dic1
{}
3)查詢:
>>> dic1 = {‘name‘:‘Tanxu‘,‘sex‘:‘女‘,‘age‘:18} >>> dic1[‘name‘] #如果key值存在,會返回其對應的value值;如果key值不存在,程序會報錯 ‘Tanxu‘ #get方法:1)可以通過key值獲取value的值,如果key不存在,默認返回None >>> print(dic1.get("Tanxu")) None >>> print(dic1.get(‘name‘)) Tanxu #2)如果設置了默認返回值,則當key不存在時,返回該默認值 >>> print(dic1.get(‘height‘,‘160‘)) 160 #setdefault操作==》1、首先判斷原來的字典中有沒有這個key,如果沒有則執行添加 # 2、用這個key去字典中查詢,返回查到的結果 >>> ret1 = dic1.setdefault("name",1) >>> print(ret1) Tanxu >>> ret2 = dic1.setdefault("height",160) >>> print(ret2) 160
4)d1.update(d2) ==》把d2的k-v更新到d1中
>>> dic1 = {‘name‘:‘Tanxu‘,‘sex‘:‘女‘,‘age‘:18} >>> dic2 = {"height":"160","weight":"45"} >>> dic1.update(dic2) >>> dic1 {‘name‘: ‘Tanxu‘, ‘sex‘: ‘女‘, ‘age‘: 18, ‘height‘: ‘160‘, ‘weight‘: ‘45‘}
2、字典的其他相關操作
1)得到字典中的key,value以及鍵值對
print(dict1.keys()) #拿到所有的key,返回key的集合,該集合可叠代循環 ##for key in dict1.keys(): #循環遍歷key值 ## print(key) print(dict1.values()) #拿到所有的value,返回value的集合,該集合可叠代循環 ##for value in dict1.values(): #循環遍歷value值 ## print(value) print(dict1.items()) #拿到所有的鍵值對,每一項都是元組,元組集合也可叠代 ##for item in dict1.items():#循環遍歷key:value鍵值對 ## print(item)#返回元組 ## print(item[0]) #返回key ## print(item[1]) #返回value
#遍歷字典
for k,v in dic1.items():
print(k)
print(v)
2)解構,解包
##解構 解包 a,b = (1,2) #即把a賦值為1,b賦值為2 print(a)
3)字典的嵌套
dic = { "name":"Tanxu", "age":"19", "hobby":"listen music", "frend1":{ "name":"李四", "age":"22", "hobby":"writting" }, "frend2":{ "name":"王五", "age":"19", "hobby":"singing" } } print(dic["frend1"]["name"])
三、range操作(叠代循環)
語法:
range(開始,結束,步長)默認開始可以取到,結束取不到,步長可以為負數
實例:
1、循環:for i in range(10): #打印0 - 9 Print(i) 2、循環:for i in range(3,9): #打印3 - 8 Print(i) 3、循環:for i in range(3,10,2): #打印3,5,7,9 Print(i) 4、循環:for i in range(10,1,-1): #打印10,9,8,7,6,5,4,3,2 Print(i) 5、循環:for i in range(10,-10,-1): #打印10,9,8,7,6,5,4,3,2,1,0,-1,-2,……,-9 Print(i)
python中的數據類型之元組和字典