1. 程式人生 > 實用技巧 >第八天

第八天

今日內容

瞭解:

  佇列:先存進去的資料先取出來
  堆疊:先存進去的資料後取出來

一、集合:

  ======================================基本使用======================================
  1、用途:去重、關係運算。
              ps:其中集合去重無法保準順序,並只能針對不可變元素去重。

  2、定義方式:在{,}內用逗號隔開多個元素,集合內元素的特徵有三個
              (1)集合內元素必須是不可變元素
              (2)集合內元素不能重複
              (3)集合內元素無序

  3、常用操作+內建的方法:
              優先掌握的操作:
              1、長度len
              s1 = {1,2,3}
              print(len(s1))   # 3
              2、成員運算in和not in
              s1 = {1,2,3}
              print(3 in s1)       # True
              print(3 not in s1)   # False

              1、|並集(合集):兩個集合併到一起
              2、&交集:取兩個集合的共同部分
              3、-差集:一個集合減掉與另一個集合共同的部分
              4、^對稱差集(交叉補集):求兩個集合互相減,然後再併到一起
              5、==
              6、父集:>,>=  當一個集合完全包含了另外一個集合,該集合才能稱為爹
              s1 = {1,2,3}
              s2 = {4,5,6}
              print(s1 >= s2)   # False
              print(s1.issuperset(s2))
              7、子集:<,<=
              print(s1 <= s2)   # False
              print(s1.issubset(s2))

              舉例:
              pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
              linuxs={'wupeiqi','oldboy','gangdan'}

              list1 = pythons | linuxs   # {'egon', 'yuanhao', 'wupeiqi', 'oldboy', 'biubiu', 'gangdan', 'alex'}
              print(pythons.intersection(linuxs))
              print(pythons.intersection_update(linuxs))

              list2 = pythons & linuxs   # {'wupeiqi', 'gangdan'}
              print(pythons.union(linuxs))

              list3 = pythons - linuxs   # {'yuanhao', 'alex', 'egon', 'biubiu'}
              print(pythons.difference(linuxs))

              list4 = linuxs - pythons   # {'oldboy'}
              print(linuxs.difference(pythons))

              list5 = pythons ^ linuxs   # {'egon', 'oldboy', 'yuanhao', 'biubiu', 'alex'}
              print(pythons.symmetric_difference(linuxs))

              需要掌握的操作:
              s1 = {1,2,3}

              1、s1.update()
              s1.update({3,4,5})
              print(s1)    # {1, 2, 3, 4, 5}

              2、s1.add()
              s1.add(4)
              print(s1)      # {1, 2, 3, 4}

              3、刪除
              3.1  remove(3)
              s1.remove(3)
              print(s1)       # {1, 2}
              3.2  pop()
              res =  s1.pop()   # 隨機刪除 返回刪除的值
              print(s1)
              print(res)
              3.3  discard()
              s1.discard(444444)   # 刪除不存在的元素不會報錯
              print(s1)    # {1, 2, 3}
              3.4  clear()
              s1.clear()
              print(s1)      # set()

              4、copy
              res = s1.copy()
              print(res)      # {1, 2, 3}

              5、isdisjoint()
              s1 = {1,2,3}
              s2 = {4,5,6}
              print(s1.isdisjoint(s2))  # True

  ======================================該型別總結====================================
  存多個值

  無序

  集合型別本身是可變的,裡面的元素是可迭代的(能被for迴圈)

二、檔案處理

1、什麼是檔案

  檔案時作業系統提供給使用者或者應用程式操作硬碟的一種機制
  python中檔案是物件
  Linux檔案:一切裝置都可以看成是檔案
  檔案的作用:把一些資料以檔案的形式儲存起來,檔案由檔案系統進行管理,當程式下一次執行的時候,通過檔案系統快速找到對應的檔案,而找到對應的資料,省時省力。

2、為何要用檔案

  讀寫檔案 ---> 存取硬碟
  應用程式:  open()
  作業系統:  開啟檔案
  計算機硬體:  硬碟空間

3、如何用檔案

1)開啟檔案

  方式一:open
  舉例:open("檔案路徑(可以是絕對路徑,也可以是相對路徑)",mode:"開啟檔案的方式(rwa,tb),encoding="字元編碼格式")  #開啟檔案
  可以將這個值做變數 f = open("檔案路徑(可以是絕對路徑,也可以是相對路徑)",mode:"開啟檔案的方式(rwa,tb),encoding="字元編碼格式")
  這時 f=值 叫做檔案控制代碼/檔案物件,可以對檔案控制代碼做操作
  f.close()             #關閉檔案,每次用open開啟檔案操作完之後都要記得關閉檔案,不然耗費作業系統的資源,如果開啟檔案數量過多時會打不開。

  方式二:with open
  舉例 with open("檔案路徑(可以是絕對路徑,也可以是相對路徑)",mode:"開啟檔案的方式(rwa,tb),encoding="字元編碼格式") as f:
  可以開啟多個檔案,用逗號隔開,如果開啟檔案數量多的話每個結尾可以加一個/,換行表示。
  with(上下文管理),這個方式開啟檔案會在操作完檔案之後自動關閉檔案,無需手動關閉。

三、字元編碼

1、儲備知識:

  執行python程式的三個步驟:python.py
  1、先啟動python直譯器
  2、直譯器會將文字檔案a.py內容由硬碟讀入記憶體
  3、直譯器會解釋執行剛剛讀入記憶體的內容,識別python語法

2、什麼是字元編碼:

  人類的字元 ----- 編碼 -----> 數字

  人類的字元 <----- 解碼 ----- 數字

  編碼與解碼的過程必須參照字元編碼表

3、為何要學習字元編碼:

  為了解決執行python程式三個階段中2、3階段有可能出現的亂碼問題

4、字元編碼表發展史

  一家獨大:

        ASCII:只能識別英文字元
        8bit 對應一個英文字元     1byte = 8bit (byte:位元組   bit:(二進位制)位,位元)



  天下大亂

        GBK:能識別漢子與英文

        用2Bytes對應一個字元

        Shift-JIS:日文與英文

        Euc -KR:韓文與英文

        英文字元----->記憶體:ASCII格式的二進位制----->硬碟:ASCII格式的二進位制

        中文字元、英文字元----->記憶體:gbk格式的二進位制----->硬碟:gbk格式的二進位制

        日文字元、英文字元----->記憶體:shift-JIS格式的二進位制----->硬碟:shift-JIS格式的二進位制

        萬國字元----->記憶體:unicode格式的二進位制----->硬碟:utf-8格式的二進位制



  分久必合

        unicode:1、萬國字元

        2、相容老的字元編碼表

結論:

  如何保證不亂碼

  1、編碼與解碼必須參照同一張字元編碼表