資料型別內建方法(三)
阿新 • • 發佈:2022-03-10
資料型別內建方法(三)
字典的內建方法
-
型別轉換
1. 字典的定義 方式一: dict1 = {'name':'petter','age':18} 方式二: dict1 = dict(name = 'petter', age = 18) 2. 型別轉換(以後多數是直接定義字典,用到轉換的非常少) 用法一: dict1 = dict([['name','petter'],('age',18)]) print(dict1) 執行結果: {'name': 'petter', 'age': 18} 用法二:fromkeys方法 print(dict.fromkeys([11, 22, 33])) print(dict.fromkeys([11, 22, 33],99)) 執行結果: {11: None, 22: None, 33: None} {11: 99, 22: 99, 33: 99} # fromkeys(引數1,引數2),以引數1的每個元素為新字典的key,引數2為新字典每個key對應的value,不寫預設為None,引數1必須是可以for迴圈的資料型別,引數2可以是任意資料型別
-
常用方法
dict1 = {'name': 'petter', 'age': '18','hobby':['eat','sleep']} # 1. 按key取值 # 方式一: # print(dict1['name']) # >>>petter # 缺點:當key不存在時,會直接報錯 # 方式二: # print(dict1.get('name')) # print(dict1.get('oscar')) # print(dict1.get('oscar', '這個key不存在')) # >>>petter # >>>None # >>>這個key不存在 # 推薦使用這種方式,即使key不存在,也不會報錯,導致程式停止,且可以自己定義提示語句,當key不存在時,預設輸出None,如果定義提示語句,則會輸出提示語句 ====================================================== # 2.修改值 字典也是可變型別 # dict1['name'] = 'oscar' # 直接根據key修改value即可 # print(dict1) # >>>{'name': 'oscar', 'age': '18', 'hobby': ['eat', 'sleep']} ====================================================== # 3. 新增鍵值對 # dict1['heiget'] = 185 # 鍵不存在則是新增一個鍵值對 # print(dict1) # >>>{'name': 'petter', 'age': '18', 'hobby': ['eat', 'sleep'], 'heiget': 185} ====================================================== # 4.統計字典中鍵值對的個數 # print(len(dict1)) # >>>3 ====================================================== # 5.成員運算 # print('name' in dict1) # print('petter' in dict1) # >>>True # >>>False # 只能判斷key是否是成員變數 ====================================================== # 6.刪除鍵值對 # 方式一:(根據索引key刪除整個鍵值對) # del dict1['name'] # print(dict1) # >>>{'age': '18', 'hobby': ['eat', 'sleep']} # 方式二:(根據索引key彈出鍵值對) # print(dict1.pop('name')) # print(dict1) # >>>petter # 彈出name對應的value值petter # >>>{'age': '18', 'hobby': ['eat', 'sleep']} # 方式三:(隨機彈出,用的非常少) # print(dict1.popitem()) # print(dict1) # >>>('hobby', ['eat', 'sleep']) #隨機彈出一個鍵值對,而不是value # >>>{'name': 'petter', 'age': '18'} ====================================================== # 7. 獲取所有的鍵 所有的值 所有的鍵值對 # print(dict1.keys()) # 獲取所有key,返回值可以看成列表 # print(dict1.values()) # 獲取所有value,返回值可以看成列表 # print(dict1.items()) # 獲取所有鍵值對,返回值可以看成列表套元組 # >>>dict_keys(['name', 'age', 'hobby']) # >>>dict_values(['petter', '18', ['eat', 'sleep']]) # >>>dict_items([('name', 'petter'), ('age', '18'), ('hobby', ['eat', 'sleep'])]) # 原理: # 迴圈遍歷字典,取出每一個key或者value,或者整個鍵值對 """在python2中上述三個方法就是直接返回一個列表 """ ======================================================
-
需要了解的操作
dict1 = {'name': 'petter', 'age': '18','hobby':['eat','sleep']} # 1. update更新字典 # dict1.update({'name':'oscar','age':19,'height':185}) # print(dict1) # >>>{'name': 'oscar', 'age': 19, 'hobby': ['eat', 'sleep'], 'height': 185} # 當key存在時,更新value,當key不存在時,新建鍵值對 ====================================================== # 2.fromkeys()快速生成字典(很少用到) # dict2 = dict.fromkeys([1,2,3],[]) # print(dict2) # >>>{1: [], 2: [], 3: []} """面試題""" # dic['k1'].append(111) # 三個鍵指向的是同一個列表,append是給整個字典賦值,所有的key都指向同一個value # print(dic) # >>>{'k1': [111], 'k2': [111], 'k3': [111]} ====================================================== # 3.setdefault() # print(dict1.setdefault('height', 185)) # 鍵不存在則新增鍵值對 並且有返回結果是新增的v # >>>185 # print(dic.setdefault('name', 'oscar')) # 鍵存在 則返回對應的值 不做修改 # print(dict1) # >>>petter # >>>{'name': 'petter', 'age': '18', 'hobby': ['eat', 'sleep']}
元組內建方法
- 型別轉換
# 元組可以看成不可變的列表
'''支援for迴圈的資料型別都可以轉成元組'''
# print(tuple(11)) # 報錯
# print(tuple(11.11)) # 報錯
print(tuple('jason'))
print(tuple([11,22,33,44]))
print(tuple({'name':'jason'}))
print(tuple({11,22,33,44}))
# print(tuple(True)) # 報錯
-
元組的特性
當元組內只有一個值時,一定要在值後加個逗號,不然整個元組會被系統識別為該值的資料型別 eg: t1 = (11, 22) t2 = (11) t3 = (11,) print(type(t1)) print(type(t2)) print(type(t3)) 執行結果: <class 'tuple'> <class 'int'> <class 'tuple'> """ 一般情況下 我們會習慣性的將所有可以儲存多個數據的型別的資料 如果內部只有一個元素 也會加逗號 (1,) [1,] {1,} {'name':'jason',} """
-
常用方法
t1 = (11, 22, 33, 44, 55, 66) # 1. 索引取值 # t1 = (11, 22, 33, 44, 55, 66) # print(t1[0]) # >>>11 # >>>66 ====================================================== # 2. 切片,步長[起點:終點:步長] # print(t1[0:3]) # print(t1[0:3:2]) # print(t1[-5:-1:2]) # >>>(11, 22, 33) # >>>(11, 33) # >>>(22, 44) ====================================================== # 3. 統計元組內元素的個數 # print(len(t1)) # >>>6 ====================================================== # 4. 成員運算 # print(11 in t1) # print(88 in t1) # >>>True # >>>False ====================================================== # 5.統計某個元素出現的次數 # print(t1.count(22)) # >>>1 ====================================================== # 7.元組內元素不能"修改": 元組內各個索引值指向的記憶體地址不能修改 # t1[0] = 111 #報錯 """ 筆試題 tt = (11, 22, 33, [11, 22]) tt[-1].append('heiheihei') 問:執行之後的結果 正確答案選B A.報錯 B.正常新增 C.不知道 ### tt[-1] == [11,22],列表新增元素當然可以新增 ### """
集合內建方法
-
型別轉換
# print(set(11)) # 報錯 # print(set(11.11)) # 報錯 # print(set('jason')) # print(set([11,22,33,44])) # print(set({'name':'jason'})) # print(set((11,22,33))) # print(set(True)) # 報錯 """集合內元素只能是不可變型別"""
-
兩大功能
1. 去重 集合內不能出現重複的元素(自帶去重特性) 如果出現了 會被集合自動去重 eg: s1 = {1,1,5,6,4,8,8,4,6,4,7} print(s1) 執行結果: {1, 4, 5, 6, 7, 8} 2. 關係運算 判斷兩個群體內的差異 eg:共同好友 共同關注 共同點贊 # 關係運算 f1 = {'jason', 'kevin', 'tony', 'jerry'} # 小李的好友列表 f2 = {'jason', 'tom', 'jerry', 'jack'} # 小王的好友列表 # 1.求兩個人的共同好友 # print(f1 & f2) # {'jerry', 'jason'} # 2.求小李的單獨好友 # print(f1 - f2) # {'kevin', 'tony'} # 3.求兩個人所有的好友 # print(f1 | f2) # {'kevin', 'jack', 'tom', 'jason', 'jerry', 'tony'} # 4.求兩個人各自的好友 print(f1 ^ f2) # {'jack', 'tony', 'tom', 'kevin'}
垃圾回收機制
"""python底層針對空間的申請和釋放都是設計好的 不需要程式設計師操心"""
1. 引用計數
一個變數被一個變數名指向時,他的引用計數就是1,被兩個變數名指向就是2,當沒有變數名指向變數時,這個變數的引用計數就是0,Python會將其清除
2. 標記清除
當記憶體空間即將溢位時,Python會自動啟動應急機制,停止程式執行,挨個檢查引用計數為0的資料並打上標記,然後一次清除
3. 分代回收
根據資料存在時間長短,將值換分成三個等級
存在時間短的資料 監測機制檢測的時間間隔越短
存在時間長的資料 監測機制檢測的時間間隔越長