第5天資料型別之整形,字串和列表
整形(不可變,儲存一個值)
對於int型別的解釋
把一個數字或者字串轉換成整形,如果沒有引數就返回0,如果引數是一個數字,那麼就不變。對於浮點型,會自動省略小數點後面的值Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.__int__(). For floating point numbers, this truncates towards zero. # 這個主要說的是進位制轉換的方法,預設base為10是十進位制的 If xis not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by '+' or '-' and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the basefrom the string as an integer literal. >>> int('0b100', base=0) 4 # (copied from class doc)
賦值操作
number = 10 # python在宣告變數的時候不需要宣告變數的型別,會進行自動的轉換,其實這個就是執行了number = int(10)
轉換操作,如下圖所示,如果轉換的是number,int括號裡面可以為整形也可為浮點型,如果轉換的是str,括號裡面的字串必須只能包含整數,負責會報錯。如果int裡面什麼都沒有,會返回0。
十進位制轉換成其他進位制的方法
# 系統自帶的一寫內建函式會給我們用來對十進位制到其他進位制的轉換print(bin(256)) # 十進位制轉換成二進位制 print(oct(256)) # 十進位制轉換成八進位制 print(hex(256)) # 十進位制轉換成十六進位制
其他進位制轉換成十進位制的方法
# 其他進位制轉換成字串的時候傳入的第一個引數必須是字串型別# 第一個引數代表的是多少進位制的數,後面的引數代表的是進位制 print(int('56', 10)) # 10進位制的數56要轉換成10進位制 print(int('0101', 2)) # 二進位制的數0101要轉換成10進位制 print(int('56', 8)) # 八進位制的數56要轉換成十進位制 print(int('56', 16)) # 16進位制的數56要轉換成十進位制
浮點型(不可變,可儲存一個值)
python關於浮點型的解釋
# 和整形其實是一樣的,如果可以轉換就用來轉換一個數字和字串為浮點型的資料Convert a string or number to a floating point number, if possible.
浮點型的賦值操作
float_number = 1.2
浮點型的轉換操作,轉換操作大部分和int是類似的,不同的是float裡面字元的可以是浮點型的.當傳遞的值為空的時候返回為0.0 。
字串(不可變,有序,可儲存多個值)
取值和切片
從前往後面進行取值和切片的,取值就是根據字串的索引來取的,字串的切片預設取左不取右的,例如圖中的s[0::1]和s[0:-1:1]通過結果可以看出來,s[0:-1:1]是取不到最後一個字元的
除了從前往後取值之外,還有從後往前取值的,很簡單,就是步長變成負的就可以了,但是要強調的一點是s[引數一:引數二: 引數三]中的三個引數是有一定的邏輯的,當引數一:引數二本身是從前往後的話,引數三就必須是正數,當引數一到引數二是從後往前的話,引數三就必須是複數了。否則是取不到值的。如下圖所示:0: -1 是從前往後的,但是引數三卻是-1,-1:0是從後往前的,但是引數三確實1,所以取不到資料。
strip方法:(lstrip去除左邊的指定字元,rstrip去除右邊的指定字元)
# strip就是去除字串兩邊的指定的字元 s1 = 'hello, world, 胡 ' a = s1.strip() # 預設為去除字串兩邊的空格 print(a) s2 = '*h^ello, wor,ld, , 胡*' a = s2.strip(' ,,*胡') # 只要是有的字元都會去除,只有等到沒有了才會停止 print(a)s2.strip("") # 這個會返回一個原來的字串
split方法:(可以看作是str轉化成列表的方法), rsplit從右邊開始切片
#split分割會返回一個裡面都是字串的列表 s = '*hello**world*nihao*' s1 = s.split('*') #從左往右以*分割 print(s1) s2 = s.split('**') # 從左往右以**分割 print(s2) s3 = s.split('*', 2) # 從左往右以*為分割點分割兩次 print(s3) # 執行結果: ['', 'hello', '', 'world', 'nihao', ''] ['*hello', 'world*nihao*'] ['', 'hello', '*world*nihao*']
print(s.split("")) # 和strip不一樣,這樣子寫會報錯
join方法(列表,元祖,字典轉換成str的方法)
join可以拼接一個可迭代物件,例如列表,元祖,字典,集合等,但是無論是哪種型別,裡面的值必須是字串型別的才可以進行拼接,否則會報錯。
endswith, startwith
s = 'hello, world' print(s.endswith('d', 0, -1)) # 從0到-1結束是否是以d結尾的 print(s.startswith('h', 0, -1)) # 從0到-1結束是否是以d開頭的 # 結果: False True
replace 替換方法
s = 'hello, hh ' r = s.replace('h', 'H', 2) # 引數一為舊的,引數二為新的,引數三為替換的個數 print(r)
upper和lower方法
# upper全部變成大寫,lower全部變成小寫a = 'hello, World! 中國 ' print(a.upper()) print(a.lower()) # 顯示結果: HELLO, WORLD! 中國 hello, world! 中國
format方法
有了%的格式化輸出為什麼還要format呢?如下圖,用%格式化寫起來就比較麻煩了,而且還要對準位置。
a = ''' 你好,{name},你今年{age}了。 你好,{name},你今年{age}了。 你好,{name},你今年{age}了。 你好,{name},你今年{age}了。 '''.format(name='hu', age=123) print(a)
index, find, rfind, rindex位置查詢
# index, find 都是字元所在的位置,index找不到的時候會報錯,find找不到的時候返回-1, 因此以後呀多用find,少用index s = 'hello, world!' res1 = s.index('h', 0, 6) res2 = s.find('h', 0, 6) res3 = s.find('h0', 0, 6) print(res1, res2, res3) res4 = s.index('ho', 0, 6)# rfind和rindex其實就是在尋著索引的時候有時候會遇到多個,rfind和rindex其實就是去找最後一個的索引所在的位置
captilize, title,swapcase
# capptalize首字母大寫,如果首字母是特殊字元就不變 title每個單詞首字母大寫,以特殊字元分割的都是一個單詞,swapcase大小寫的反轉 s = 'hello*wor.ld!' print(s.capitalize()) print(s.title()) print(s.swapcase()) # 結果展示 Hello*wor.ld! Hello*Wor.Ld! HELLO*WOR.LD!
center, ljust, rjust, zfill填充
# center,ljust,rjust,zfill s = 'hello' print(s.center(6, '*')) # 引數一代表的是長度,引數二代表的是填充的字元 print(s.ljust(10, '*')) print(s.rjust(10, '*')) print(s.zfill(6)) # 結果: hello* hello***** *****hello 0hello
字串練習題:(附答案)
# 寫程式碼,有如下變數,請按照要求實現每個功能 (共6分,每小題各0.5分) name = " aleX" # 1) 移除 name 變數對應的值兩邊的空格,並輸出處理結果 print(name.strip()) # 2) 判斷 name 變數對應的值是否以 "al" 開頭,並輸出結果 print(name.startswith('al')) # 3) 判斷 name 變數對應的值是否以 "X" 結尾,並輸出結果 print(name.endswith('X')) # 4) 將 name 變數對應的值中的 “l” 替換為 “p”,並輸出結果 print(name.replace('l', 'p')) # 5) 將 name 變數對應的值根據 “l” 分割,並輸出結果。 print(name.split('l')) # 6) 將 name 變數對應的值變大寫,並輸出結果 print(name.upper()) # 7) 將 name 變數對應的值變小寫,並輸出結果 print(name.lower()) # 8) 請輸出 name 變數對應的值的第 2 個字元? print(name[1]) # 9) 請輸出 name 變數對應的值的前 3 個字元? print(name[0:3]) # 10) 請輸出 name 變數對應的值的後 2 個字元? print(name[-1:-3:-1]) # 11) 請輸出 name 變數對應的值中 “e” 所在索引位置? print(name.find('e')) # 12) 獲取子序列,去掉最後一個字元。如: oldboy 則獲取 oldbo。 print(name[0:-1])View Code
列表(可變,有序,可儲存多個值)
列表的建立
l = [1, 2, 3] # ==》 l = list([1,2,3])
列表的轉換
只要是可迭代型別的資料都是可以轉換成列表的,例如: 元組,字典,字串都是可以轉換成列表的,但是整形和浮點型不行,因為他們不可迭代
列表的索引和切片和字串的都是一樣的,此處不再贅述。其中列表是可以通過索引進行修改資料的,但是字串不能修改。雖然可以修改資料,但是列表卻不能通過索引去新增新的值。因此需要通過方法去新增值。
列表的方法
修改法:del, append, insert, extend, remove, pop
l = [1, 2, 3] l.append('h') l.append(['a', 'b', 'c']) l.append(('a', 'b', 'c')) l.append('str') l.append({'a': 1}) print(l) # 顯示結果 [1, 2, 3, 'h', ['a', 'b', 'c'], ('a', 'b', 'c'), 'str', {'a': 1}]# append把整體的一個輸入追加到列表的最後
l = [1, 2, 3] l.insert(0, 'h') l.insert(0, ['a', 'b', 'c']) l.insert(0, ('a', 'b', 'c')) l.insert(0, 'str') l.insert(0, {'a': 1}) print(l) # 展示的結果 [{'a': 1}, 'str', ('a', 'b', 'c'), ['a', 'b', 'c'], 'h', 1, 2, 3]# insert在指定的位置把整體的資料新增進去
l = [1, 2, 3] l.extend('h') l.extend(['a', 'b', 'c']) l.extend(('a', 'b', 'c')) l.extend('str') l.extend({'a': 1}) print(l) # 展示結果 # [1, 2, 3, 'h', 'a', 'b', 'c', 'a', 'b', 'c', 's', 't', 'r', 'a']# extend會把可迭代物件一個一個的追加到列表當中
# remove, pop, del l = ['a', 'b', 'c', 'd', 'e'] del l[0] # 遭到列表中的值並刪除掉 res = l.pop(0) # 根據索引刪除值並且有返回值的 l.remove('e') # 根據列表中的內容刪除值,沒有返回值 print(l, res) # 結果: # ['c', 'd'] b
索引index 計數count(和字串的方法是一樣的)
a = [1, 2, 3, 1, 2, 3, 1, 2, 3, 4] print(a.index(4, 0)) # 一個是取索引 print(a.count(4)) # 一個是計數
排序sort 反轉reverse
sort只能排序全部都是數字或者字母的列表,否則會出現錯誤,反轉是都可以的
複製copy 清空clear
a = [1, 2, 3] b = a.copy() # 複製了一個a列表 print(b) b.clear() # 把b給清空掉 print(b)