1. 程式人生 > 其它 >2022.3.10筆記總結

2022.3.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.思考本週大作業