strpython
capitalize() 首字母(第一個單詞)大寫,其他變小寫api
s1 = 'I LIVE YOU' print(s1.capitalize()) >>>I live you
title() 每一個單詞的首字母大寫。(以特殊字符(非字母)隔開的即爲一個單詞)網絡
s1 = 'I LIVE YOU' print(s1.title()) >>>I Live You
swapcase() 大小寫反轉數據結構
s1 = 'I love YOU' print(s1.swapcase()) >>>i LOVE you
center() 居中,有1個必選參數:寬度,一個非必選參數:填充)app
s1 = 'I' print(s1.center(10,'%')) >>>%%%%I%%%%%
find() 經過元素找索引,找到第一個就返回,找不到返回-1。編碼
s1 = 'I love you' print(s1.find('o')) >>>3
index() 經過元素找索引,找到第一個就返回,找不到就報錯。code
tuple對象
特殊性:元祖中只有一個元素,而且沒有’,‘,則它不是元祖,它與括號中的數據類型一致排序
tu0 = (1,2) print(tu0,type(tu0)) >>>(1, 2) <class 'tuple'> tu1 = (1) print(tu1,type(tu1)) >>>1 <class 'int'> tu2 = ([1]) print(tu2,type(tu2)) >>>[1] <class 'list'> tu3 = (1,) print(tu3,type(tu3)) >>>(1, ) <class 'tuple'>
count() 計數索引
tu = (1,2,3,3,3,3) print(tu.count()) >>>4
index() 找索引
tu = ['a','b','a'] print(tu.index('a')) >>>0
list
index() 經過元素找索引
l1 = ['a','b','a'] print(l1.index('a')) >>>0
sort() 默認從小到大排序,設置reverse參數則可從小到大
l1 = [3,2,1,4] l1.sort() print(l1) >>>[1,2,3,4] l1.sort(reverse=True) print(l1) >>>[4,3,2,1]
reverse() 反轉
l1 = [2,1,3,0] l1.reverse() print(l1) >>>[0,3,1,2]
列表相加 (3.4以上版本)
l1 = [1,2,3] l2 = [3,4,5] print(l1+l2) >>>[1, 2, 3, 3, 4, 5]
列表與數字相乘 (3.4以上版本)
l1 = [2,'a',[1,'b']] l2 = l1*3 print(l2) >>>[2, 'a', [1, 'b'], 2, 'a', [1, 'b'], 2, 'a', [1, 'b']]
列表的特殊性:正向循環一個列表時若是刪除某個元素,那麼這個元素後面的全部元素都會向前進一位,它們的索引相比以前也會前進一位,所以,在循環一個列表時的過程當中,若是要改變列表的大小(增長值或者刪除值),那麼結果極可能會出錯或者報錯。
l1 = [1,2,3,4,5,6] #刪除列表中索引位爲偶數的元素。 for i in range(0,len(l1),2): l1.pop(i) print(l1) >>>IndexError: pop index out of range
解決此問題有三種方式
1.直接刪除 (按照元素刪除,按照索引刪除,切片加步長
#切片加步長 l1 = [1,2,3,4,5,6] del l1[1::2] print(l1)
2.倒敘刪除
l1 = [1,2,3,4,5,6] for i in range(len(l1)-1,-1,-2): l1.pop(i) print(l1) >>>[1,3,5] #不能用如下代碼;請自測 l1 = [1,2,3,4,5,6] for i in range(1,len(l1),2): l1.pop(-i)
3.思惟轉換
l1 = [1,2,3,4,5,6] l2 = [] for i in range(0,len(l1),2): l2.append(l1[i]) l1 = l2 print(l1)
dict
popitem 3.5版本以前,隨機刪除,3.6版本以後,刪除最後一個,有返回值。 請自測。
update
dic0 = {1:'i'} dic0.update(2='love',hobby='python') #增長鍵值對 print(dic0) >>>{1: 'i', 2: 'love', 'hobby': 'python'} dic0.update(1 = '太陽') #改鍵值對 print(dic0) >>>{1: '太陽', 2: 'love', 'hobby': 'python'} dic1 = {} dic1.update([(1,'a'),(2,'b'),(3,'c')]) print(dic1) >>>{1: 'a', 2: 'b', 3: 'c'} dic0.update(dic1) print(dic0) #有則覆蓋,無則增長 >>>{1: 'a', 2: 'b', 'hobby': 'python', 3: 'c'} print(dic1) >>>{1: 'a', 2: 'b', 3: 'c'}
fromkeys() 第一個參數必須爲可迭代對象,可迭代的對象共用第二個參數(id相同)。
dic = dict.fromkeys('abc',1) print(dic) >>>{'a': 1, 'b': 1, 'c': 1} dic = dict.fromkeys([1,2,3],[]) print(dic) >>>{1: [], 2: [], 3: []} dic[1].append('a') print(dic) >>>{1: ['a'], 2: ['a'], 3: ['a']}
小題試作:(循環一個字典時,若果改變字典的大小則或報錯。)
#將字典dic中的以‘k’開頭的鍵值對刪除 dic = {'k1':'a','k2':'b','k3':'c','a':'d'} l1 = [] for key in dic: if key.startswith('k'): l1.append(key) for i in l1: dic.pop(i) print(dic) >>>{'a':'d'} #改進 for key in list(dic.keys()): #將其轉換爲一個列表,若不加list則回報錯。 if 'k' in key: dic.pop(key) print(dic) >>>{'a','d'}
數據之間類型的轉換:
int bool str 三者轉換
str list 二者轉換
list set 二者轉換
str bytes 二者轉換
全部數據均可以轉換成bool值:
轉換成bool值爲False的數據類型有:
'',0,(),{},[],set(),None
基礎數據結構類型的總結
編碼的進階:
不一樣的編碼方式之間不能相互識別
數據在內存中所有是以Unicode編碼的,可是當數據用於網絡傳輸或者存儲到硬盤中,必須是以非Unicode編碼(utf-八、gbk等)
python中的數據從內存(Unicode編碼)存儲到硬盤或進行網絡傳輸時要經歷一個特殊的轉化過程,要轉化爲一個非Unicode編碼類型的特殊數據才能進行傳輸或儲存至硬盤,即bytes類型(內存中的編碼方式:非Unicode)
#str轉bytes: a = b'iloveyou' print(a,type(a)) >>>b'iloveyou' <class 'bytes'> #將中文轉化爲bytes類型: b = b'山就在那兒' print(b) >>>SyntaxError: bytes can only contain ASCII literal characters #正確方法爲: c = '山就在那兒' b = c.encode('utf-8') print(b) #or print(c.encode('utf-8')) #通常指定utf-8的編碼形式, (encode:編碼) >>>b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'
bytes可轉化爲字符串類型(Unicode)(decode,解碼)。用什麼編碼類型轉換爲bytes數據類型的就用什麼解碼。
b = b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf' c = b.decode('utf-8') or print(b.decode('utf-8')) print(c) >>>山就在那兒 #用什麼編碼類型轉換爲bytes數據類型的就用什麼解碼。 b = b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf' c = b.decode('gbk') print(c) >>>UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 14: incomplete multibyte sequence
小題試作:gbk轉換爲utf-8
#分析,全部的編碼都與Unicode有關(計算機內存中以Unicode編碼),所以可先將gbk轉換爲Unicode編碼,再轉換爲utf-8編碼。 gbk = b'\xc9\xbd\xbe\xcd\xd4\xda\xc4\xc7\xb6\xf9' decode1 = gbk.decode('gbk') #解碼爲Unicode編碼的字符串,可print(decode1)查看。 print(decode1.encode('utf-8')) #以utf-8編碼 >>>b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'