day7__基礎(python基礎數據類型補充以及編碼的進階)

来源:https://www.cnblogs.com/mr-xiong/archive/2020/06/23/13179925.html
-Advertisement-
Play Games

一、基礎數據類型補充內容 1、字元串 s1 = 'taobao jD shopping' print(s1.capitalize()) #首字母大寫,其餘小寫 print(s1.swapcase()) #大小寫翻轉 print(s1.title()) #每個單詞的首字毒大寫 ret2 = s1.ce ...


一、基礎數據類型補充內容

1、字元串

s1 = 'taobao jD shopping'
print(s1.capitalize())   #首字母大寫,其餘小寫

print(s1.swapcase())    #大小寫翻轉

print(s1.title())  #每個單詞的首字毒大寫

ret2 = s1.center(30,"*")  # 內同居中,總長度,空白處填充
print(ret2)

s1 = 'taobao jD shopping'
ret3 = s1.find('D')  #find:通過元素找索引,找到第一個就返回,找不到返回-1
print(ret3)

ret4 = s1.index('d')
print(ret4)   ## 返回的找到的元素的索引,找不到報錯。

2、元組

​ python中元組有一個特性,元組中如果只含有一個元素且沒有逗號,則該元組不是元組,與改元素數據類型一致,如果有逗號,那麼它是元組。

tu = (1)
print(tu,type(tu))  # 1 <class 'int'>
tu1 = ('alex')
print(tu1,type(tu1))  # 'alex' <class 'str'>
tu2 = ([1, 2, 3])
print(tu2,type(tu2))  # [1, 2, 3] <class 'list'>

tu = (1,)
print(tu,type(tu))  # (1,) <class 'tuple'>
tu1 = ('alex',)
print(tu1,type(tu1))  # ('alex',) <class 'tuple'>
tu2 = ([1, 2, 3],)
print(tu2,type(tu2))  # ([1, 2, 3],) <class 'tuple'>

元組也有一些其他的方法:

index:通過元素找索引(可切片),找到第一個元素就返回,找不到該元素即報錯。

tu = ('太白', [1, 2, 3, ], 'WuSir', '女神')
print(tu.index('太白'))   #0
print(tu.index('aaa'))	  #ValueError: tuple.index(x): x not in tuple

count: 獲取某元素在列表中出現的次數

tu = ('太白', [1, 2, 3, ], '太白','WuSir', '太白','女神')
print(tu.count('太白'))

3、列表

列表的其他操作方法:

count(數)(方法統計某個元素在列表中出現的次數)

a = ["q","w","q","r","t","y"]
print(a.count("q"))

index(方法用於從列表中找出某個值第一個匹配項的索引位置)

a = ["q","w","r","t","y"]
print(a.index("r"))

sort (方法用於在原位置對列表進行排序)。

reverse (方法將列表中的元素反向存放)。

a = [2,1,3,4,5]
a.sort()# 他沒有返回值,所以只能列印a
print(a)
a.reverse()#他也沒有返回值,所以只能列印a
print(a)

列表也可以相加與整數相乘

l1 = [1, 2, 3]
l2 = [4, 5, 6]
print(l1 + l2)  # [1, 2, 3, 4, 5, 6]
print(l1 * 3)  # [1, 2, 3, 1, 2, 3, 1, 2, 3]

迴圈列表,改變列表大小的問題

​ 有列表l1, l1 = [11, 22, 33, 44, 55],請把索引為奇數對應的元素刪除(不能一個一個刪除,此l1只是舉個例子,裡面的元素不定)。

l1 = [11,22,33,44,55,66,77,88,99]
del l1[1::2]
print(l1)
l1 = [11,22,33,44,55,66,77,88,99]
for i in range(len(l1)-1,-1,-1):
    if i %2 == 1:
        l1.pop(i)
print(l1)
l1 = [11,22,33,44,55,66,77,88,99]
new_l1 = []
for i in range(len(l1)):
    if i %2 == 0 :
        new_l1.append(l1[i])
print(new_l1)

4、dict字典

#popitem 3.5版本之前,popitem為隨機刪除,3.6之後為刪除最後一個,有返回值
dic = {'name': '太白', 'age': 18}
ret = dic.popitem()
print(ret,dic) # ('age', 18) {'name': '太白'}
# update
dic = {'name': '太白', 'age': 18}
dic.update(sex='男', height=175)
print(dic) # {'name': '太白', 'age': 18, 'sex': '男', 'height': 175}
dic = {'name': '太白', 'age': 18}
dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')])
print(dic) # {'name': '太白', 'age': 18, 1: 'a', 2: 'b', 3: 'c', 4: 'd'}
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) # {'name': 'alex', 'weight': 75} 

fromkeys:創建一個字典:字典的所有鍵來自一個可迭代對象,字典的值使用同一個值。

dic = dict.fromkeys('abcd','太白')
print(dic) # {'a': '太白', 'b': '太白', 'c': '太白', 'd': '太白'}

dic = dict.fromkeys([1, 2, 3],'太白')
print(dic) # {1: '太白', 2: '太白', 3: '太白'}

# 這裡有一個坑,就是如果通過fromkeys得到的字典的值為可變的數據類型,那麼你的小心了。
dic = dict.fromkeys([1, 2, 3], [])
dic[1].append(666)
print(id(dic[1]),id(dic[2]),id(dic[3]))  # {1: [666], 2: [666], 3: [666]}
print(dic)  # {1: [666], 2: [666], 3: [666]}

迴圈字典,改變字典大小的問題

dic = {'k1':'太白','k2':'barry','k3': '白白', 'age': 18} 請將字典中所有鍵帶k元素的鍵值對刪除。

dic = {'k1':'太白','k2':'barry','k3': '白白', 'age': 18}
dic2= dic.keys()
dic3 = list(dic2)
for i in dic3:
    if i.find('k') != -1:
        del dic[i]
print(dic)
輸出結果:
{'age': 18}
dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
for i in list(dic.keys()):
    if 'k' in i:
        del dic[i]
print(dic)
輸出結果:
{'age': 18}

二. 數據類型間的轉換問題

int bool str 三者轉換

# int ---> bool
i = 100
print(bool(i))  # True  # 非零即True
i1 = 0
print(bool(i1))  # False 零即False

# bool ---> int
t = True
print(int(t))  # 1  True --> 1
t = False
print(int(t))  # 0  False --> 0

# int ---> str
i1 = 100
print(str(i1))  # '100'

# str ---> int  # 全部由數字組成的字元串才可以轉化成數字
s1 = '90'
print(int(s1))  # 90

# str ---> bool
s1 = '太白'
s2 = ''
print(bool(s1))  # True 非空即True
print(bool(s2))  # False
# bool ---> str
t1 = True
print(str(True))  # 'True'

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

三.基礎數據類型的總結

按存儲空間的占用分(從低到高)

  • 數字
  • 字元串
  • 集合:無序,即無序存索引相關信息
  • 元組:有序,需要存索引相關信息,不可變
  • 列表:有序,需要存索引相關信息,可變,需要處理數據的增刪改
  • 字典:有序,需要存key與value映射的相關信息,可變,需要處理數據的增刪改(3.6之後有序)

按存值個數區分

標量/原子類型 數字,字元串
容器類型 列表,元組,字典

按可變不可變區分

可變 列表,字典
不可變 數字,字元串,元組,布爾值

按訪問順序區分

直接訪問 數字
順序訪問(序列類型) 字元串,列表,元組
key值訪問(映射類型) 字典

四. 編碼的進階

編碼即是密碼本,編碼記錄的就是二進位與文字之間的對應關係,現存的編碼本有:

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、不同的密碼本之間不能互相識別

2、數據在記憶體中全是以Unicode編碼的,但是當你的數據用於網路傳輸或者存儲到硬碟中,必須以非Unicode編碼(utf-8,gbk等等)

img

3、bytes數據類型

英文

  • ​ str :'hello'

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

​ 表現形式:'hello'

  • ​ bytes:

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

​ 表現形式; b'hello'

b = b'hello'  #如果在字元串前加b,它就變為一個bytes類型的數據
print(b,type(b))  #b'hello' <class 'bytes'>
b = b'hello'
print(b.upper(),type(b))  #b'HELLO' <class 'bytes'>

中文

  • str :'中國'

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

​ 表現形式:'中國'

  • bytes:

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

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

轉換

  • str -------> bytes
# encode稱作編碼:將 str 轉化成 bytes類型
s1 = '中國'
b1 = s1.encode('utf-8')  # 轉化成utf-8的bytes類型
print(s1)  # 中國
print(b1)  # b'\xe4\xb8\xad\xe5\x9b\xbd'
s1 = '中國'
b1 = s1.encode('gbk')  # 轉化成gbk的bytes類型
print(s1)  # 中國
print(b1)  # b'\xd6\xd0\xb9\xfa'
  • bytes ----->str
# decode稱作解碼, 將 bytes 轉化成 str類型
b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
s1 = b1.decode('utf-8')
print(s1)  # 中國
# decode稱作解碼, 將 bytes 轉化成 str類型
b1 = b'\xd6\xd0\xb9\xfa'
s1 = b1.decode('gbk')
print(s1)  # 中國

註:用什麼編碼(gbk,utf-8等)轉過來的,必須要用相同的編碼轉回去。

  • gbk ------>utf-8

​ gbk編碼的bytes如何轉化成utf-8編碼的bytes

不同編碼之間,不能直接互相識別。

​ Unicode是萬碼之源,先用gbk轉為Unicode,轉從Unicode轉換為utf-8

b1 =  b'\xe4\xb8\xad\xe5\x9b\xbd'  # 這是utf-8編碼bytes類型的中國
b2 =  b'\xd6\xd0\xb9\xfa'   # 這是gbk編碼bytes類型的中國
b2 =  b'\xd6\xd0\xb9\xfa'  # 這是gbk編碼bytes類型的中國
s = b2.decode('gbk')
print(s)
s1 = s.encode('utf-8')
print(s1)
輸出結果:b'\xe4\xb8\xad\xe5\x9b\xbd'

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

-Advertisement-
Play Games
更多相關文章
  • ●存儲大小的不同: localStorage的大小一般為5M sessionStorage的大小一般為5M cookies的大小一般為4K ●有效期不同: 1.localStorage的有效期為永久有效,除非你進行手動刪除。 2.sessionStorage在當前會話下有效,關閉頁面或者瀏覽器時會被 ...
  • 我們使用原生JS+CSS3,來開發一個集趣味性與技術性於一體的H5小游戲。我們會就地講解項目中用到的css,js基礎知識點,先舉一些小的示例,來闡明知識點的用法,再說明如何在本項目中應用,應用在哪塊功能的實現上。比如標準文檔流,定位,浮動,盒子模型,CSS3彈性盒子,CSS3高級選擇器,背景圖片,j... ...
  • 1、定位的疊放次序(只有定位的盒子才擁有這個屬性) (1)在使用定位佈局的時候,可能會出現盒子重疊的情況,此時,可以使用z-index來控制盒子的前後次序。該屬性的值可以是正整數、負整數或0,預設是auto,數值越大,盒子越靠上 <!DOCTYPE html> <html> <head> <meta ...
  • 面向對象三要素:封裝、繼承、多態。 封裝和繼承,這兩個比較好理解,但要理解多態的話,可就稍微有點難度了。今天,我們就來講講多態的理解。 我們應該經常會看到面試題目:請談談對多態的理解。 其實呢,多態非常簡單,就一句話:調用同一種方法產生了不同的結果。 具體實現方式有三種。 一、重載 重載很簡單。 p ...
  • 為什麼要搭建港股交易平臺?那就要問股民們為什麼會選擇港股進行投資了?一般的股民可能有人會說:還能為啥啊?賺錢唄!!!但是選擇投資港股,卻可能不是簡單的賺錢這麼簡單。可能很多人並不瞭解香港市場,畢竟這是一個境外市場,運作機制和操作風格都和我們熟悉的A股有很大的不同。 與A股相比,港股的優勢是比較明顯的 ...
  • smartadmin.core.urf 這個項目是基於asp.net core 3.1(最新)基礎上參照領域驅動設計(DDD)的理念,並參考目前最為了流行的abp架構開發的一套輕量級的快速開發web application 技術架構,專註業務核心需求,減少重覆代碼,開始構建和發佈,讓初級程式員也能開 ...
  • 1.MyBatis緩存 MyBatis 包含一個非常強大的查詢緩存特性,它可以非常方便地配置和定製.緩存可以極大的提升查詢效率. 1).一級緩存 public Employee getEmpById(Integer id); <select id="getEmpById" resultType="c ...
  • 今天在jsp頁面中使用了EL表達式,同時EL表達式在for迴圈中,但是EL表達式無法與java代碼同時使用,所以記錄一下如何把java中的變數傳遞過去。 示例: <% for(int i=0;i<list.size();i++){ %> <tr> <td>${list[i].key1}</td> < ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...