1. 程式人生 > 實用技巧 >2020.11.20

2020.11.20

容器型別 (str list tuple set dict)
一. list 列表型別
特徵:可獲取,可修改,有序
1.定義空列表
listvar = []
print(listvar,type(listvar))

    2.定義普通列表
        listvar = [19,3.14,"你好",5-6j]

    3.獲取列表中的元素
        正向索引  :   0   1    2     3  
        listvar  = [19,3.14,"你好",5-6j]
        逆向索引  :  -4   -3   -2    -1
        res = listvar[2]
        print(res)
   4.獲取列表中最後一個元素
        通過逆向索引下標
        res = listvar[-1]
        print(res)

  通過len來獲取長度
  len 可以獲取容器中的元素個數(長度)
  res = len(listvar)
  print(res)
  length = res -1  # 4 -1=3
  
  獲取最後一個元素的索引下標
  res = listvar[len (listvar)-1]
  print(res)

  4.修改列表中的元素
  listvar =[19,3.14,"你好",5-6j]
  listvar[1] = 11
  print(listvar)

  二.tuple  元組型別
        特點:可獲取,不可修改,有序
  1.定義一個空元組
  tuplevar = ()
  什麼元素不寫,可以表達空元祖的概念

  定義一個普通元組
  tuplevar("啊","為")
  
  2.獲取元組當中資料
  res = tuplevar[1]
  print(res)
  
  不可修改元組中的資料
  
  3.注意點:
        區分是否是元組,由逗號這個識別符號決定

  三 字串
  特徵:可獲取,不可修改,有序



  集合型別  set (交差並補)
  特點:無序,自動去重
  
  1.定義一個集合
  setvar = {"個個","試試"}
  print(setvar,type(setvar))

  不可獲取元素,不可修改元素
  
  定義一個空集合
  setvar = set()

  2.字典型別 dict
  字典裡的資料以鍵值對的方式進行儲存,表面有序,實際上無序;
  在python3.6版本之後,底層做了優化,儲存時,記錄了字典的定義順序
  在獲取字典時,把無序儲存的資料拿出來,按照定義字典的字面順序重新排序;
  語法: {鍵1:值1,鍵2:值2,....}

  定義一個字典
  dictvar = {1:a,b:3}
  
  獲取字典中的元素
  res = dictvar[1]

  修改字典中的元素
  dictvar[1] = 2

  集合和字典之間的注意事項
   集合的值和字典的鍵有資料型別上的要求:
  允許的資料型別  (可雜湊的資料型別,不可變的資料型別) :Number(int ,float ,bool,complex ),str,tuple
  不允許的資料型別 (不可雜湊的資料型別,可變的資料型別) : list,set,dict  

  (瞭解)
  字典的鍵和集合的值在底層記憶體儲存時,使用了雜湊演算法
  雜湊演算法的要求是該資料型別為不可變的資料型別才能儲存
  雜湊演算法特點:無序的雜湊;

  為什麼要提出雜湊演算法?
  為了把資料均勻的儲存在記憶體之後,減少雜湊碰撞
  讓資料更快的儲存在記憶體中 

  同一檔案下,變數的快取機制
        Number部分
  1.對於整型而言,-5~正無窮範圍內的相同值 id 一致

  2.對於浮點型而言,非負數範圍內的相同值  id一致

  3.布林型而言.值相同情況下  id 一致

  4.複數在 實數+虛數  這樣的結構永不相同(只有正虛數的情況列外)


  容器型別部分
  5.字串 和空元組 相同的情況下  id相同

  6.列表,元組,字典,集合無論什麼情況下 id標識都不同[空元組列外]

  總結:
  無論是同一檔案的快取機制,還是不同檔案的小資料池,都是為了提升執行的效率,減小空間損耗;


        強制型別轉換 Number (int float complex bool)
  1.int的強制轉換 (整型 浮點型 布林型 純數字字串)

  2.float的強制轉換 (整型 浮點型 布林型 純數字字串)

  3.complex的強制轉換 (整型 浮點型 布林型 純數字字串 複數)

  4.bool  的強制轉換
  沒有資料型別的限制,可以轉換一切資料型別;
  bool => True 或者 False
  布林型為假的十種情況:
  Number : 0  0.0  0j   False
  容器   : ()   ''    []    {}  set()
  關鍵字 :None
  
  none:
  代表空的,一般用來對變數做初始化操作
  格式:  a = None     b = None
  

  自動型別轉換    Number
  精度從低到高
  bool  > int  > float >complex
  自動型別轉換原則 :把低精度的資料向高精度進行轉換;
  精度損耗 (寫程式時,不要用小數做比較的條件,會導致結果不準確,一般系統會把小數位擷取15~18位而產生資料的誤差)



        容器型別的強制轉換 (str list tuple set dict)
  str 強制轉換成字串
  特點:在原資料的兩邊套上引號,表達字串的型別:可以強轉一切資料

  list 強制轉換列表
  特點:如果是字串,把裡面的內容一個個拿出來,作為列表的新元素
       如果是字典,只保留字典鍵,值不要
       如果是其他容器,就是單純的把兩邊的符號換成[]

  tuple 強制轉換元組
  特點: 如果是字串,就是把裡面的字元一個個拿出來,作為元組的新元素
        如果是字典,只要字典的鍵,不要值
        如果是其他容器,就是把兩邊的字元換成()

  set  強制轉換集合
  特點: 如果是字串,就是把裡面的字元一個個拿出來,作為集合的新元素  (無序,去重)
        如果是字典,只要字典的鍵,不要值
        如果是其他容器,就是把兩邊的符號換成{}

  dict  字典的強制轉換
  必須是等長的二級容器,且元素個數是2個
  型別:
  1.外面是列表,裡面是列表或者元組

  2.外面是元組,裡面是列表或者元組

  3.外面是集合,裡面是元組

  二級容器 (list  tuple   set   dict)

  等長的二級容器 (裡面的元素都是容器 + 容器裡面的元素個數都相同)