2022.3.10筆記總結
阿新 • • 發佈:2022-03-10
2022.3.10今日筆記
- 字典內建方法
- 元組內建方法
- 集合內建方法
- 小練習
一、字典內建方法
1、型別轉換
結構:dict()
d1 ={ 'name': 'jason', 'age': 18, 'hobbies': ['play game', 'basketball']}
2、按K取值
直接使用k取v:
print(d1['name']) # jason 顯示值存在
print(d1['xxx']) # 報錯 鍵不存在則直接報錯
因此字典取值我們一般推薦使用get()方式:
print(d1.get('name') # jason 顯示值存在 print(d1.get('xxx') # None 鍵不存在不會報錯,返回None print(d1.get('name', '這個鍵不存在')) # name存在則後面的引數不會用到 print(d1.get('xxx', '這個鍵不存在')) # xxx不存在,返回第二個引數'這個鍵不存在'
3、修改值
d1['name'] = 'jasonDSB' # name鍵存在則修改值
d1['xxx'] = 'jasonDSB' # xxx不存在則新增一個鍵值對'xxx':'jasonDSB'
字典是可變型別,值改變,記憶體地址不變
4、新增鍵值對
d1['pwd'] = 123 # pwd鍵不存在則是新增一個鍵值對'pwd': 123
5、統計字典中鍵值對的個數
print(len(d1)) # 3
6、成員運算,也只能判斷K值
print('jason' in d1 ) # False 因為只能判斷k print('name' in d1) # True 因為name是k,可以被檢索到
7、刪除鍵值對
方式1:del+空格
del d1['name'] # 通用刪除方式,刪除name對應的值
方式2:pop
print(d1.pop('name')) # 返回值jason,表示刪除name:jason鍵值對,注意:與列表不同,不能用pop()彈出尾部
方式3:popitem
print(d1.popitem()) # 隨機彈出一個
8、獲取所有的鍵、值、鍵值對
print(d1.keys()) # 返回dict_keys['name','age','hobbies'] print(d1.values()) # 返回dict_values['jason',18, ['play game', 'basketball']] print(items()) # 返回dict_items([('name', 'jason'), ('age', 18), ('hobbies', ['play game', 'basketball'])]) 這裡可以堪稱列表套元組
9、瞭解操作
update更新字典
dic = {'k1':'jaosn','k2':'tony','k2':'jack'}
dic.update('k1':'jn','k4':'xx')
print(dic) # {'k1':'jn','k2':'tony','k2':'jack','k4':'xx'} 因此鍵存在則修改,不存在則新增
fromkeys()快速生成字典
dic = dict.fromkeys(['k1','k2','k3'], [])
print(dic) # {'k1':[],'k2':[],'k3':[]}
##################筆試題###################
dic['k1'].append(111) # 三個鍵指向的是同一個列表
print(dic) # {'k1': [111], 'k2': [111], 'k3': [111]}
setdefault()
dic = {'k1': 111, 'k2': 222}
print(dic.setdefault('k3',333)) # 鍵不存在則新增鍵值對,且返回新增v
print(dic.setdefault('k1',666)) # 鍵存在則返回對應值,不做修改,相當於檢視k對應的值
元組內建方法
1、型別轉換
tuple()
支援for迴圈的資料型別都能轉換成元組,字串、列表、字典、集合等
2、元組的特性
t1 = (11)
print(type(t1)) # int
'''因此當元組內只有1個元素的時候,一定要在這個元素後面加逗號'''
3、內建方法
t1 = (11, 22, 33, 44, 55, 66)
(1)索引取值
print(t1[0]) # 11
print(t1[-1]) # 66
(2)切片
print(t1[1:4]) # 取一到三
print(t1[-4:-1])
(3)步長(間隔)
print(t1[1:4:2]) # 步長為2,區間為1-3
print(t1[-4:-1:-1]) # 反向間隔
(4)統計元組內元素個數
print(len(t1)) # 6
(5)成員運算
print(66 in t1) # True
(6)統計某個元素出現的次數
print(t1.count(22)) # 1 表示一次
注意!!!元組內的元素不能'修改:因此元素內各個索引值指向的記憶體空間不能改,但是指向的如果是列表等多元素可變型別,則列表內的元素可以修改,聯絡下面筆試題進行理解
"""
筆試題
tt = (11, 22, 33, [11, 22])
tt[-1].append('heiheihei')
問:執行之後的結果 正確答案選B
A.報錯 B.正常新增 C.不知道
"""
tt = (11, 22, 33, [11, 22])
print(id(tt[-1])) # 1493843855176
tt[-1].append('heiheihei')
print(id(tt[-1])) # 1493843855176
print(tt) # (11, 22, 33, [11, 22, 'heiheihei'])
集合內建方法
1、型別轉換
set([11,22,33,44,])
同理集合內的元素只能是不可變型別,且集合內是無序的,並且元素不能重複
2、兩大功能(去重、關係運算)
(1)集合自帶去重功能,只要轉化成集合,機會自動清理重複項,以列表轉集合為例:
s1 = [1,1,1,1,1,3,3,3,4,4,4,4,5,5,5,5]
print(set(s1)) # {1, 3, 4, 5}
(2)關係運算
f1 = {'jason','kevin','tony','jerry'}
f2 = {'jason','tom','jerry','jack'}
1.求兩個人的共同好友
print(f1 & f2) # {'jason','jerry'}
2.求兩個人其中一個人的單獨好友
print(f1 - f2) # {'kevin',tony}
3.求兩個人的所有好友
print(f1 | f2) # {'kevin', 'jack', 'tom', 'jason', 'jerry', 'tony'}
4.求兩個人的所有不同好友
print(f1 ^ f2) # {'jack', 'tony', 'tom', 'kevin'}
垃圾回收機制
1、引用計數
引用計數為記憶體中資料身上繫結的變數名的個數
python會將引用計數為0的資料清除
2、標記清除
當空間即將溢位時,python會啟動應急機制停止程式,並檢查每個資料的引用計數,為0的打上標記
3、分代回收
根據值存在的時間長短以及引用次數將資料分為三個等級,分別從高到底監督監管次數越多
作業解答
1.練習昨日註冊登入作業
2.去重列表元素並保留原來的順序
l = ['a', 'b', 1, 'a', 'a']
答:
n = []
l = ['a', 'b', 1, 'a', 'a']
for m in l:
if m in n:
continue
else:
n.append(m)
print(n)
3.去重下列資料字典並保留原來的順序
# 針對不可變型別,並且保證順序則需要我們自己寫程式碼實現,例如
l=[
{'name':'lili','age':18,'sex':'male'},
{'name':'jack','age':73,'sex':'male'},
{'name':'tom','age':20,'sex':'female'},
{'name':'lili','age':18,'sex':'male'},
{'name':'lili','age':18,'sex':'male'},
]
答:
j = []
for i in l:
if i in j:
continue
else:
j.append(i)
print(j)
4.關係運算
有如下兩個集合,pythons是報名python課程的學員名字集合,linuxs是報名linux課程的學員名字集合
pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
linuxs={'oscar','tony','gangdan'}
1. 求出即報名python又報名linux課程的學員名字集合
答:print(pythons & linuxs)
2. 求出所有報名的學生名字集合
答:print(pythons | linuxs)
3. 求出只報名python課程的學員名字
答:print(pythons - linuxs)
4. 求出沒有同時這兩門課程的學員名字集合
答:print(pythons ^ linuxs)
5.整理今日內容及筆記
6.思考本週大作業