python筆記06

python筆記06 數據類型python

上個筆記內容補充算法

  1. 補充
    • 列表
      • reverse,反轉。
        v1 = [1,2,3111,32,13]
        print(v1)
        v1.reverse()
        print(v1)
        v1=v1[::-1]
      • sort
        v1 = [11,22,3111,32,13]
        print(v1)緩存

        # v1.sort(reverse=False) # 從小到大(默認)
        # v1.sort(reverse=True) # 從大到小
        # print(v1)
    • 字典
      • keys/values/items
        info = {'k1':'v1','k2':'v2'}
        for x1,x2 in info.items():
        print(x1,x2)
        for item in info.items():
        print(item)
        for k in info.values():
        print(k)
        for x in info.keys():
        print(x)
        輸出:
        k1 v1
        k2 v2
        ('k1', 'v1')
        ('k2', 'v2')
        v1
        v2
        k1
        k2
      • get
        info = {'k1':'v1','k2':'v2'}app

        # v1 = info['k1']#k1無值,會報錯.
        # v2 = info.get('k1') # 若是k1無值,返回None給v2.
        # v3 = info.get('k1',666)#若是k1無值,返回666給v3.
        # print(v2)
        # None數據類型,改類型表示空(無任何功能,專門用於提供空值)
      • pop
        info = {'k1':'v1','k2':'v2'}
        result = info.pop('k2')
        print(info,result)
        del info['k1']
        print(info)
        輸出的結果:
        {'k1': 'v1'} v2
        {}
      • update
        info = {'k1':'v1','k2':'v2'}
        # 不存在,則添加/存在,則更新
        info.update({'k3':'v3','k4':'v4','k2':666})
        print(info)
        ----------
        info = {'k1':'v1','k2':'v2'}
        info.update({'k3':666})
        print(info)
        輸出的結果:
        {'k1': 'v1', 'k2': 'v2', 'k3': 666}
    • 判斷一個字符串中是否有敏感字符?
      • str
        v = "Python全棧21期"
        if "全棧" in v:
        print('含敏感字符')
      • list/tuple
        v = ['alex','oldboy','藏老四','利奇航']
        if "利奇航" in v:
        print('含敏感')
      • dict
        v = {'k1':'v1','k2':'v2','k3':'v3'}code

        # 默認按照鍵判斷,即:判斷x是不是字典的鍵。
        if 'x' in v:
            pass 
        
        # 請判斷:k1 是否在其中?
        if 'k1' in v:
            pass
        # 請判斷:v2 是否在其中?
        # 方式一:循環判斷
        flag = '不存在'
        for v in v.values():
            if v == 'v2':
                flag = '存在'
        print(flag)
        # 方式二:
        if 'v2' in list(v.values()): # 強制轉換成列表 ['v1','v2','v3']
             pass
        # 請判斷:k2:v2 是否在其中?
        value = v.get('k2')
        if value == 'v2':
            print('存在')
        else:
            print('不存在')
      • 練習題
        # 讓用戶輸入任意字符串,而後判斷此字符串是否包含指定的敏感字符。索引

        char_list = ['利奇航','堂有光','炸展會']
        content = input('請輸入內容:') # 我叫利奇航  / 我是堂有光  / 我要炸展會
        success = True
        for v in char_list:
            if v in content:
                success = False
                break
        if success:
         print(content)
        else:
            print('包含銘感字符')
        
        # 示例:
        # 1. 昨天課上最後一題
        # 2. 判斷 ‘v2’ 是否在字典的value中 v = {'k1':'v1','k2':'v2','k3':'v3'} 【循環判斷】
        # 3. 敏感字

內容詳細內存

  1. 集合 set

集合特色:無序,無重複字符串

v = {1,2,3,4,5,6,99,100}

# 疑問:v = {}
"""
None
int
    v1 = 123
    v1 = int() --> 0
bool
    v2 = True/False
    v2 = bool() -> False
str
    v3 = ""
    v3 = str()
list
    v4 = []
    v4 = list()
tuple
    v5 = ()
    v5 = tuple()
dict
    v6 = {}
    v6 = dict()
set
    v7 = set()
"""
  1. 集合獨有功能
    • add
    • discard
    • update
    • intersection
    • union
    • difference
    • symmetric_difference
      v = {1,2,3,4,5,6,99,100}
      v.clear()#表示清空
      #增長
      v.add('zhangsan')
      print(v)
      #刪除
      v.discard(100)
      print(v)
      #批量增長
      v.update({101,102,105})
      print(v)
      v1=v.intersection([101,102])
      print(v1)
      #交集
      v2=v.intersection({102,103,105,106})
      print(v2)
      #並集
      v3=v.union({1000,1001,1002,1005})
      print(v3)
      #差集
      v4=v.difference({1,2,3})
      print(v4)
      #對稱差集,v5屬於二者並集,且不屬於二者交集。
      v5=v.symmetric_difference({1,'lisi',5})
      print(v5)
      輸出:
      {1, 2, 3, 4, 5, 6, 99, 100, 'zhangsan'}
      {1, 2, 3, 4, 5, 6, 99, 'zhangsan'}
      {1, 2, 3, 4, 5, 6, 99, 101, 'zhangsan', 105, 102}
      {101, 102}
      {105, 102}
      {1, 2, 3, 4, 5, 6, 99, 101, 'zhangsan', 105, 102, 1000, 1001, 1002, 1005}
      {99, 4, 101, 5, 6, 'zhangsan', 105, 102}
      {2, 3, 4, 99, 6, 101, 'zhangsan', 105, 102, 'lisi'}
  2. 公共功能
    • len
      v = {1,2,'李邵奇'}
      print(len(v))
    • for循環
      v = {1,2,'李邵奇'}
      for item in v:
      print(item)
    • 集合沒有的特性:索引、步長、切片、刪除、修改
  3. 嵌套問題
    # 1. 列表/字典/集合 -> 不能放在集合中+不能做爲字典的key(unhashable)
    集合中的元素是經過has計算,放在has表中。
    # info = {1, 2, 3, 4, True, "國風", None, (1, 2, 3)}
    # print(info),輸出中沒有true,true和1重合。
    # 2. hash -> 哈希是怎麼回事?
    # 由於在內部會將值進行哈希算法並獲得一個數值(對應內存地址),之後用於快速查找。get

    # 3. 特殊狀況
    # info = {0, 2, 3, 4, False, "國風", None, (1, 2, 3)}
    # print(info) ,False和None重合。
    
    # info = {
    #     1:'alex',
    #     True:'oldboy'
    # }
    # print(info),
    #{1: 'oldboy'}
    #(1,和true在has計算後重合)
  4. 內存相關input

  • 示例一
    v1 = [11,22,33]
    v2 = [11,22,33]

    v1 = 666
    v2 = 666
    
    v1 = "asdf"
    v2 = "asdf"
    
    # 按理 v1 和 v2 應該是不一樣的內存地址。特殊:
    py緩存機制:
    py小數據值:-5-256,值重複賦值,地址相同
    字符串:常見字符串,重複賦值,地址相同
    1. 整型:  -5 ~ 256 
    2. 字符串:"alex",'asfasd asdf asdf d_asdf '       ----"f_*" * 3  - 從新開闢內存。
  • 示例二:
    v1 = [11,22,33,44]
    v1 = [11,22,33]
    print(v1)
    [11, 22, 33]
  • 示例三:
    v1 = [11,22,33]
    v2 = v1

    # 練習1 (內部修改)
    v1 = [11,22,33]
    v2 = v1 
    v1.append(666)
    print(v2) # 含 666
    
    # 練習2:(賦值)
    v1 = [11,22,33]
    v2 = v1 
    v1 = [1,2,3,4]
    print(v2)#v1從新賦值,v2仍是指向v1 = [11,22,33]。
    
    # 練習3:(從新賦值)
    v1 = 'alex'
    v2 = v1
    v1 = 'oldboy'
    print(v2) #alex
  • 示例四
    v = [1,2,3]
    values = [11,22,v]

    # 練習1:
    """
    v.append(9)
    print(values) # [11,22,[1,2,3,9]]
    """
    # 練習2:
    """
    values[2].append(999)
    print(v) # [1, 2, 3, 999]
    """
    # 練習3:
    """
    v = 999
    print(values) # [11, 22, [1, 2, 3]]
    """
    # 練習4:
    values[2] = 666
    print(v) # [1, 2, 3]
  • 示例五
    v1 = [1,2]
    v2 = [2,3]
    v3 = [11,22,v1,v2,v1]
    這裏v3中的v1,v2,v1表示的上面兩個列表的地址。v1,v2從新複製,v3不會變化。
  • 查看內存地址
    """
    v1 = [1,2,3]
    v2 = v1
    v1.append(999)
    print(v1,v2)
    print(id(v1),id(v2))
    """

    """
    v1 = [1,2,3]
    v2 = v1
    print(id(v1),id(v2))
    v1 = 999
    print(id(v1),id(v2))
    """
    問題:== 和 is有什麼區別?
    • == 用於比較值是否相等。
    • is 用於比較內存地址是否相等。
相關文章
相關標籤/搜索