基礎資料型別補充
str補充方法
-
a = str
-
格式化方法
-
a.capitalize() 【首字母改成大寫】
-
a.casefold()【都改成小寫】
-
a.lower() 【全變小寫】
-
a.swapcase() 【大小寫互換】
-
a.upper() 【改大寫】
-
a.center(填充長度,‘填充的符號’) 【兩邊填充】
-
a.ljust() 【左邊填充】
-
a.rjust() 【右邊填充】
-
a.zfill() 【字串空的地方填0】
-
a.strip() 【兩邊去死皮】
-
a.lstrip() 【左邊去死皮】
-
a.rstrip() 【右邊去死皮】
-
a.format() 【參考外部變數】
a = 'my name is {name}, i am {age} years old.' a.format(name='JacKMa',age=56) 'my name is JacKMa, i am 56 years old.'
-
-
判斷方法
-
a.startswith(‘判斷開頭字符’) 【判斷開頭真偽】
-
a.endswith(‘判斷結尾字符’) 【判斷結尾真偽】
-
a.isalnum() 【是不是字母or數字】
-
a.isalpha() 【是不是字母】
-
a.isdigit() 【是不是數字,只能是阿拉伯數字】
-
a.isnumeric() 【是不是數字,只要是數字形式就為真,列如:二十】
-
a.isidentifier() 【是不是py關鍵字】
-
a.isprintable() 【是否可列印】
-
a.isspace() 【是不是空格】
-
a.isupper() 【是不是都是大寫】
-
-
查、改、計數、替換
-
a.find('查的字符',開始位置,結束位置) 【查找從左到右第一個所查字符的位置】
-
a.rfind('查的字符',開始位置,結束位置) 【查找從右到左第一個所查字符的位置】
-
a.index() 【和find一樣,但是找不到會報錯,find找不到不會報錯,回傳-1】
-
a.count(‘尋找的值’,開始位置,結束位置) 【計數尋找的值有多少個】
-
a.split(‘按什么分割’,maxsplit=切幾次,默認全切) 【默認按空格分割字串,回傳的是字典】
-
a.rsplit() 【從右邊切】
-
a.splitlines() 【按換行符/n切割】
-
a.removeprefix(’要去掉的字符‘) 【去掉前綴某些字符】
-
a.removesuffix(’要去掉的字符‘) 【去掉后綴某些字符】
-
a.replace(’被替換的‘,‘想替換的’,替換多少次默認全部) 【替換,不是更改】
-
-
特殊變態方法
-
‘連接符自定義’.join(需要拼接的串列) 【把串列轉成字串,每個元素拼接起來,按指定格式】
-
需要加密的字符.maketrans(‘資料源’,’輸出的加密文‘) 【生成密碼本,資料源和輸入顯示的加密文必須一一對應都為str】
-
需要加密的文字.translate(‘密碼本’) 【加密】
-
tuple 補充方法
-
元組中如果只有一個元素并且沒有逗號,那么它不是元組,它與改元素的資料型別一致,
tup = ([1, 2, 3]) print(type(tup)) tup = ('str') print(type(tup)) tup = ('str',) # 加了逗號 print(type(tup)) #輸出 <class 'list'> <class 'str'> <class 'tuple'> # 型別就變為元組
- count():計數,獲取某元素在串列中出現的次數
- index():通過元素找索引
list補充方法
-
串列可以相加
l1 = [1, 2, 3] l2 = ['a', 'b', 'c'] print(l1 + l2) #輸出 [1, 2, 3, 'a', 'b', 'c']
- 串列可以與數字相乘
l1 = [1, 'abc', 3] print(l1*3) # 輸出 [1, 'abc', 3, 1, 'abc', 3, 1, 'abc', 3]
- 相關題:
- l1 = [11, 22, 33, 44, 55]
索引為奇數對應的元素洗掉,[11, 33, 55]
- 正常思路:
先將所有的索引整出來,
加以判斷,index % 2 != 0 :pop(index)
for index in range(len(l1)): if index % 2 != 0: l1.pop(index) print(index) print(l1) # 輸出: [11, 33, 44] # 因為串列洗掉一個后面的會把前面的補齊,所以索引就變了,
- 最簡單的
del l1[1::2] # 以切片步長來洗掉 print(l1) # 輸出: [11, 33, 55]
- 倒敘法洗掉
for index in range(len(l1)-1, -1, -1): # 從后面洗掉就不會影響不到前面的索引 if index % 2 != 0: l1.pop(index) print(l1) # 輸出 [11, 33, 55]
- 思維置換: 取出所有的偶數位的值
new_l1 = [] for index in range(len(l1)): if index % 2 == 0: new_l1.append(l1[index]) l1 = new_l1 print(l1) # 輸出 [11, 33, 55]
- 正常思路:
- 回圈一個串列時,最好不要改變串列的大小,這樣會影響你最終的結果,
- l1 = [11, 22, 33, 44, 55]
dict:補充方法
-
update() 增加鍵值對,同時增加幾個,有則增加無則修改,元組拆包
-
同時增加幾個鍵值對,
dic = {'name': '小楊', 'age': 18} dic.update(hobby='運動',hight='170') print(dic) # 輸出 {'name': '小楊', 'age': 18, 'hobby': '運動', 'hight': '170'} - 有則增加,無則修改(更新)
dic = {'name': '小楊', 'age': 18} dic.update(name='小紅', hight='170') print(dic) # 輸出 {'name': '小紅', 'age': 18, 'hight': '170'} dic = {'name': '小楊', 'age': 18} dic2 = {'name': '小明', 'sex': '男'} dic.update(dic2) print(dic) # 輸出 {'name': '小明', 'age': 18, 'sex': '男'} - 元組拆包
dic = {'name': '小楊', 'age': 18} tup = [(1, 'a'), (2, 'b'), (3, 'c')] dic.update(tup) print(dic) # 輸出 {'name': '小楊', 'age': 18, 1: 'a', 2: 'b', 3: 'c'}fromkeys:字典的鍵來自一個可迭代物件,值共用一個 - fromkeys:字典的鍵來自一個可迭代物件,值共用一個
dic = dict.fromkeys('abcd', 100) print(dic) # 輸出 {'a': 100, 'b': 100, 'c': 100, 'd': 100}
- fromkeys的坑!值共用一個,
dic = dict.fromkeys(['a', 'b', 'c', 'd'], []) print(dic) dic['a'].append(666) # 給鍵 a 的值添加 666 其他的也會跟著添加 print(dic) # 輸出 {'a': [], 'b': [], 'c': [], 'd': []} {'a': [666], 'b': [666], 'c': [666], 'd': [666]}
-
- 相關題:
dic = {'k1': '小楊', 'k2': 'barry', 'k3': '拜拜', 'age': 18}
將字典中key含有k元素的鍵值對洗掉
注意:回圈一個字典時,如果改變這個這個字典的大小就會報錯,
for key in dic: if 'k' in key: dic.pop(key) print(dic) # 輸出報錯 RuntimeError: dictionary changed size during iteration
但是可以把key中含有k元素的鍵單獨拿出來在回圈洗掉
dic = {'k1': '小楊', 'k2': 'barry', 'k3': '拜拜', 'age': 18} # 將字典中key含有k元素的鍵值對洗掉 key = [] for i in dic.keys(): if 'k' in i: key.append(i) for n in key: dic.pop(n) print(dic) # 輸出 {'age': 18}或者:
for key in list(dic.keys()): #不加list是動態在字典中獲取,還是和字典有互動會報錯,加list強轉串列 if 'k' in key: dic.pop(key) print(dic) # 輸出 {'age': 18}
編碼的進階
-
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 亞洲文字;一個字符三個位元組表示,
-
不同的密碼本之間能否互相識別?不能,
-
資料在記憶體中全部是以Unicode編碼的,但是當你的資料用于網路傳輸或者存盤到硬碟中,必須是以非Unicode編碼(utf-8,gbk等等),
英文:
str: 'hello '
記憶體中的編碼方式: Unicode
表現形式: 'hello'
bytes :
記憶體中的編碼方式: 非Unicode
表現形式:b'hello'
中文:
str: '中國'
記憶體中的編碼方式: Unicode
表現形式:'中國'
bytes :
記憶體中的編碼方式: 非Unicode # Utf-8
表現形式:b'\xe4\xb8\xad\xe5\x9b\xbd'
-
bytes型別可以直接在網路上傳輸或者儲存到硬碟中
# str ---> bytes (Unicode---->非Unicode) s1 = '中國' b1 = s1.encode('utf-8') # 編碼成utf-8的中國-->’\xe4\xb8\xad\xe5\x9b\xbd‘,也可以是其他編碼 print(b1, type(b1)) # 輸出: b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'> # bytes ---> str b1 = b'\xe4\xb8\xad\xe5\x9b\xbd' s2 = b1.decode('utf-8') # 解碼,用什么進行編碼的就用什么進行解碼 print(s2) # 輸出: 中國
- str(Unicode編碼) 資料型別和 bytes(非Unicode編碼) 資料型別的相互轉換
- str--->bytes
s1 = '中國' # 將Unicode編碼的‘中國’轉換成utf-8編碼 b1 = s1.encode('utf-8') # encode編碼,編碼后型別為bytes print(b1) # 輸出 b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>
- bytes--->str
s1 = '中國' # 將Unicode編碼的‘中國’轉換成utf-8編碼 b1 = s1.encode('utf-8') # encode編碼,編碼后型別為bytes s2 = b1.decode('utf-8') # decode解碼,解碼后型別為str print(s2, type(s2))
- str--->bytes
- bytes(gbk編碼)和 bytes(utf-8編碼的轉換)
將gbk編碼轉換成utf-8編碼流程 gbk--->Unicode--->utf-8 反之亦然 gbk = b'\xd6\xd0\xb9\xfa' # gbk編碼的中國,型別為bytes str1 = gbk.decode('gbk') # 先解碼轉換成Unicode,型別為str utf_8 = str1.encode('utf-8') # 在編碼成utf-8,型別為bytes print(utf_8) # 輸出 b'\xe4\xb8\xad\xe5\x9b\xbd'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/274984.html
標籤:其他
