python基礎數據類型補充以及編碼進階

来源:https://www.cnblogs.com/xiaomage666/archive/2019/05/08/10829087.html
-Advertisement-
Play Games

01 內容大綱 1. 基礎數據類型的補充 2. 數據類型之間的轉換 3. 編碼的進階 02 具體內容: 數據類型的補充: str 元組 列表 字典 數據類型的轉換 int bool str 三者轉換 str list 兩者轉換 list set 兩者轉換 str bytes 兩者轉換 所有數據都可以 ...


01 內容大綱

  1. 基礎數據類型的補充
  2. 數據類型之間的轉換
  3. 編碼的進階

02 具體內容:

  • 數據類型的補充:

    • str

      # str :補充的方法練習一遍就行。
       s1 = 'taiBAi'
       # capitalize 首字母大寫,其餘變小寫
       print(s1.capitalize())
      
       # swapcase  大小寫翻轉
       print(s1.swapcase())
      
       # title  每個單詞的首字母大寫
       msg= 'taibai say3hi'
       print(msg.title()) 
      
       s1 = 'barry'
       # center 居中:內同居中,總長度,空白處填充
       print(s1.center(20))
       print(s1.center(20,'*'))
      
       ##尋找字元串中的元素是否存在
       # find :通過元素找索引,找到第一個就返回,找不到 返回-1
       # index:通過元素找索引,找到第一個就返回,找不到 報錯
       print(s1.find('a'))
       print(s1.find('r'))
       print(s1.find('o'))
       print(s1.index('o'))
    • 元組

      # tuple  元組中如果只有一個元素,並且沒有逗號,那麼它不是元組,它與該元素的數據類型一致。 ***【重點】
       tu1 = (2,3,4)
       tu1 = (2)
       tu1 = ('太白')
       tu1 = ([1,2,3])
       tu1 = (1,)
       print(tu1,type(tu1))
      
      # # count 計數  獲取某元素在列表中出現的次數
       tu = (1,2,3,3,3,2,2,3,)
       print(tu.count(3))
      
      # # index  通過元素找索引(可切片),找到第一個元素就返回,找不到該元素即報錯。
      tu = ('太白', '日天', '太白')
      print(tu.index('太白'))
      
    • 列表

      # count 統計某個元素在列表中出現的次數
        a = ["q","w","q","r","t","y"]
        print(a.count("q"))
      
      # index
       l1 = ['太白', '123', '女神', '大壯']
       print(l1.index('大壯'))
      
      # sort  **【重點】用於在原位置對列表進行排序
         l1 = [5, 4, 3, 7, 8, 6, 1, 9]
         l1.sort()  # 預設從小到大排序
         l1.sort(reverse=True)  # 從大到小排序  **
      
      # reverse **【重點】將列表中的元素反向存放
         l1.reverse()  # 反轉  
         print(l1)
      
      # 列表可以相加
       l1 = [1, 2, 3]
       l2 = [1, 2, 3, '太白', '123', '女神']
       print(l1 + l2)
      
      # 列表與數字相乘
       l1 = [1, 'daf', 3]
       l2 = l1*3
       print(l2)
      
      迴圈列表,改變列表大小的問題:
       l1 = [11, 22, 33, 44, 55]
      # 索引為奇數對應的元素刪除(不能一個一個刪除,此l1只是舉個例子,裡面的元素不定)。
      #  *** 重要
      # 正常思路:
      # 先將所有的索引整齣來。
      # # 加以判斷,index % 2 == 1: pop(index)
      # for index in range(len(l1)):
      #     if index % 2 == 1:
      #         l1.pop(index)
      # print(l1)
      
      ## 最簡單的:
       l1 = [11, 22, 33, 44, 55]
       del l1[1::2]  #切片步長刪除
       print(l1)
      
      ## 倒序法刪除元素
       l1 = [11, 22, 33, 44, 55]
       for index in range(len(l1)-1,-1,-1):
           if index % 2 == 1:
               l1.pop(index)
       print(l1)
      
      # 思維置換:把索引為偶數的元素添加到一個新列表,在賦值給原列表
       l1 = [11, 22, 33, 44, 55]
       new_l1 = []
       for index in range(len(l1)):
           if index % 2 ==0:
               new_l1.append(l1[index])
       l1 = new_l1
       print(l1)
      
      #註意: 迴圈一個列表的時,最好不要改變列表的大小,這樣會影響你的最終的結果。
      
    • 字典

      # 字典的補充:
      # update ***
        dic = {'name': '太白', 'age': 18}
         #增:
        dic.update(hobby='運動', hight='175') 
         #改:
        dic.update(name='太白金星')
         ## 面試會考
        dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')])  
        print(dic)
      
        # 更新,有則覆蓋,無則添加
        dic1 = {"name":"jin","age":18,"sex":"male"}
        dic2 = {"name":"alex","weight":75}
        dic1.update(dic2)  
        print(dic1)  # {'name': 'alex', 'age': 18, 'sex': 'male', 'weight': 75}
        print(dic2)
      
      # fromkeys  創建一個字典:字典的所有鍵來自一個可迭代對象,字典的值使用同一個值
        dic = dict.fromkeys('abc', 100)
        dic = dict.fromkeys([1, 2, 3], 'alex')
      # 坑:值共用一個,面試題
       dic = dict.fromkeys([1,2,3],[])
       dic[1].append(666)
       print(dic)
      
      迴圈字典,改變字典大小的問題:
      dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
      # 將字典中鍵含有'k'元素的鍵值對刪除。
      #錯誤做法:
      # for key in dic:
      #     if 'k' in key:
      #         dic.pop(key)
      # print(dic)
      
      # 迴圈一個字典時,如果改變這個字典的大小,就會報錯。--->迴圈一個列表,然後對字典進行修改
      #1:
       l1 = []
       for key in dic:
           if 'k' in key:
               l1.append(key)
       print(l1)
       for i in l1:
           dic.pop(i)
       print(dic)
      
      #2:
       for key in list(dic.keys()):  # ['k1', 'k2', 'k3','age']
           if 'k' in key:
               dic.pop(key)
       print(dic)
      
  • 數據類型的轉換

    • int bool str 三者轉換

    • str list 兩者轉換

      • # str ---> list
        s1 = 'alex 太白 武大'
        print(s1.split())  # ['alex', '太白', '武大']
        
        # list ---> str  # 前提 list 裡面所有的元素必須是字元串類型才可以
        l1 = ['alex', '太白', '武大']
        print(' '.join(l1))  # 'alex 太白 武大'
    • list set 兩者轉換

      • # list ---> set
        s1 = [1, 2, 3]
        print(set(s1))
        
        # set ---> list
        set1 = {1, 2, 3, 3,}
        print(list(set1))  # [1, 2, 3]
    • str bytes 兩者轉換

      • # str ---> bytes
        s1 = '太白'
        print(s1.encode('utf-8'))  # b'\xe5\xa4\xaa\xe7\x99\xbd'
        
        # bytes ---> str
        b = b'\xe5\xa4\xaa\xe7\x99\xbd'
        print(b.decode('utf-8'))  # '太白'
    • 所有數據都可以轉化成bool值

      • 轉化成bool值為False的數據類型有:'', 0, (), {}, [], set(), None
  • 數據類型的分類(瞭解)

  • 編碼的進階

    • ASCII碼:包含英文字母,數字,特殊字元與01010101對應關係。

      a 01000001 一個字元一個位元組表示。

    • GBK:只包含本國文字(以及英文字母,數字,特殊字元)與0101010對應關係。

      a 01000001 ascii碼中的字元:一個字元一個位元組表示。

      中 01001001 01000010 中文:一個字元兩個位元組表示。

    • Unicode包含全世界所有的文字與二進位0101001的對應關係。

      a 01000001 01000010 01000011 00000001

      b 01000001 01000010 01100011 00000001

      中 01001001 01000010 01100011 00000001

    • UTF-8:包含全世界所有的文字與二進位0101001的對應關係(最少用8位一個位元組表示一個字元)。

      a 01000001 ascii碼中的字元:一個字元一個位元組表示。

      To 01000001 01000010 (歐洲文字:葡萄牙,西班牙等)一個字元兩個位元組表示。

      中 01001001 01000010 01100011 亞洲文字;一個字元三個位元組表示。

  1. 所有編版本(Unicode除外)不能直接互相識別。不同編碼之間,不能直接互相識別。**)
  2. 數據在記憶體中全部是以Unicode編碼的,但是當你的數據用於網路傳輸或者存儲到硬碟中,必須是以非Unicode編碼(utf-8,gbk等等)
  3. 在記憶體中所有數據類型(除bytes類型外)都是Unicode 編碼方式,bytes 是非Unicode編碼方式。
  4. bytes類型 只能與str 類型互相轉化,不能與其他數據類型轉化。

英文:

str: 'hello '

​ 記憶體中的編碼方式: Unicode

​ 表現形式: 'hello'

bytes :

​ 記憶體中的編碼方式: 非Unicode

​ 表現形式:b'hello'

中文:

str:

​ 記憶體中的編碼方式: Unicode

​ 表現形式:'中國'

bytes :

​ 記憶體中的編碼方式: 非Unicode # Utf-8

​ 表現形式:b'\xe4\xb8\xad\xe5\x9b\xbd'

註意:bytes類型也是Python基礎數據類型之一。bytes是非unicode編碼的數據類型,除此之外,python中所有數據類型的編碼均為unicode編碼。

​ bytes類型也稱作位元組文本,他的主要用途就是網路的數據傳輸,與數據存儲。

        # str ---> bytes (Unicode ---> 非Unicode)  
         s1 = '中國'
         b1 = s1.encode('utf-8')  # 編碼
         print(b1,type(b1))  # b'\xe4\xb8\xad\xe5\x9b\xbd'
         
         b1 = s1.encode('gbk')  # 編碼  # b'\xd6\xd0\xb9\xfa' <class 'bytes'>
        
        # bytes---->str (非Unicode ---> Unicode) 
         b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
         s2 = b1.decode('utf-8')  # 解碼
         print(s2)
        # gbk ---> utf-8
        b1 = b'\xd6\xd0\xb9\xfa'
        s = b1.decode('gbk')
        print(s)
        b2 = s.encode('utf-8')
        print(b2)  # b'\xe4\xb8\xad\xe5\x9b\xbd'
        
       
       # utf-8 ---> gbk
        b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
        s = b1.decode('utf-8')
        print(s)#中國
        b2 = s.encode('gbk')
        print(b2)  # b'\xd6\xd0\xb9\xfa'
        

03 總結

  • 數據類型的補充: list(sort,revrse,列表的相加,乘,迴圈問題),dict (update 迴圈問題) 【重點】***
  • 編碼的進階:
    • bytes為什麼存在?
    • str --->bytes
    • gbk <-----> utf-8

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 服務引入 服務引入使用reference標簽來對要引入的服務進行配置,包括服務的介面 ,名稱,init,check等等配置屬性。 在DubboNamespaceHandler中,我們可以看到reference標簽是通過引入一個ReferenceBean類型的bean實現的,那麼我們就以這個bean為 ...
  • 官網:www.fhadmin.org 工作流模塊 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3.運行中流程:查看流程信息、當前任務節點、當前流程圖、作廢暫停流程、指派待辦人 4. ...
  • 單例模式是一種設計模式,這一種設計模式的目的是使得該類在整個JVM系統中只有唯一的一個實例對象,在就java開發過程中,很多場景下會碰到這種需求,所以單例模式也是最常用的設計模式之一,下麵從以下幾個方面對單例模式進行解說。 一、單例模式的概念: 需要設計一個類,達到的效果:在類的整個應用中指存在一個 ...
  • 編程語言集成了發佈訂閱 很多編程語言框架里都提供了發佈訂閱的組件,或者叫事件處理機制,而spring框架對這個功能也有支持,主要使用 實現訂閱,使用 使用發佈。這種系統集成的我們先叫它“集成組件” 與語言無關的消息隊列 事實上,發佈訂閱真的與開發語言沒有什麼關係,所以出現了另一種產品,消息中間件,或 ...
  • 首先會看懂UML UML類圖與類的關係詳解 虛線箭頭指向依賴;實線箭頭指向關聯;虛線三角指向介面;實線三角指向父類;空心菱形能分離而獨立存在,是聚合;實心菱形精密關聯不可分,是組合; 上面是UML的語法。在畫類圖的時候,理清類和類之間的關係是重點。類的關係有泛化(Generalization)、實現 ...
  • 前言 前幾天,在食堂吃飯,本來每天中午的新聞三十分換成了視頻監控。我們已經習慣了,前十分鐘看著領導都很忙,中間十分鐘中國人民都很幸福,後十分鐘別的國家都生活在水深火熱里,順便跟同事談談國家大事。突然主角換成了我們自己,便毫無抬頭的欲望。 恰巧最近也有在接觸大屏監控的解決方案,於是乎,就索性拿樹莓派實 ...
  • 所屬網站分類: 資源下載 > python電子書 作者:today 鏈接:http://www.pythonheidong.com/blog/article/448/ 來源:python黑洞網 內容簡介 本書是對以數據深度需求為中心的科學、研究以及針對計算和統計方法的參考書。本書共五章,每章介紹一到 ...
  • 今天整理一下自己的基礎篇輸入和輸出的理解,自己沒有研究系統輸入和輸出函數,以後有時間在去深究,之前在別人的博客裡面看到這麼一句話分享給大家,“學習就是一個不斷抄襲,模仿,練習和創新的一個過程”。 使用VC2015 1.創建項目,【文件】》【新建】》【項目】 2.項目類型為【Win32控制台應用程式】 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...