1. 程式人生 > 其它 >資料型別內建方法(三)

資料型別內建方法(三)

資料型別內建方法(三)

字典的內建方法

  1. 型別轉換

    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可以是任意資料型別    
    
  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中上述三個方法就是直接返回一個列表 """
    ======================================================
    
  3. 需要了解的操作

    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']}
    

元組內建方法

  1. 型別轉換
# 元組可以看成不可變的列表
'''支援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))  # 報錯
  1. 元組的特性

    當元組內只有一個值時,一定要在值後加個逗號,不然整個元組會被系統識別為該值的資料型別
    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',}
    """
    
  2. 常用方法

    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],列表新增元素當然可以新增 ###
    """
    

集合內建方法

  1. 型別轉換

    # 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))  # 報錯
    """集合內元素只能是不可變型別"""
    
  2. 兩大功能

    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. 分代回收
	根據資料存在時間長短,將值換分成三個等級
    	存在時間短的資料 監測機制檢測的時間間隔越短
        存在時間長的資料 監測機制檢測的時間間隔越長