今日學習內容: 一、基本數據類型及內置方法 1、數字類型 2、字元串類型 3、列表類型 今天學習的內容比較細比較雜,需要一點一點嚼爛慢慢消化,別急,加油!ヾ(◍°∇°◍)ノ゙ 一、可變不可變類型: 可變類型:值改變,id不變,也就是說在不改變id的情況下可以改變值,id地址不變。就是可變類型。 不可 ...
今日學習內容:
一、基本數據類型及內置方法
1、數字類型
2、字元串類型
3、列表類型
今天學習的內容比較細比較雜,需要一點一點嚼爛慢慢消化,別急,加油!ヾ(◍°∇°◍)ノ゙
=============================================================
一、可變不可變類型:
可變類型:值改變,id不變,也就是說在不改變id的情況下可以改變值,id地址不變。就是可變類型。
不可變類型:值改變,id也會隨著改變,證明就是產生了新值,開闢了新的id空間存放新值。這種就是不可變類型,在id原值的基礎上對應值不可改變,只能另闢新的id空間存放新值,而不能在原id地址上對對應值進行變更。
x = 1 print(id(x)) x = 2 print(id(x)) >>>>>>結果是2個值的對應id不同,發生了改變。 x = [1, 2] print(id(x)) x[0] = 'A' # 將列表索引0的數值改變替換為A,我們會發現列表的id值仍然不變 print(id(x))
二、數字類型:
1 int整型:int只能將純數字的類型轉成整型。
age = 10 # age = int(10) a = '1234' # int(a),會把字元串類型a轉換成整型1234 b = '1234 ' # int(b)會報錯,int無法轉換為整型 c = '123abc' # int(c)會報錯,int無法轉換為整型 # int只能轉換純數字類型的字元串
2 float浮點型:float只能將純帶小數的字元串類型數據轉換成浮點型。
總結:int和float類型統稱為數字類型,該類型數據為不可變類型,只能存一個值。
三、字元串類型:
當我們定義一個字元串的時候其實是這樣的
msg = ‘hello’ # msg = str('hello'),也就是將hello數據變成字元串類型,然後關聯給msg。
由於字元串屬於一種記錄描述性質狀態的類型,所以,任何類型的變數都能轉換成字元串類型。
a = 1 b = 1.1 c = ['a', 'b'] d = {'c': 'sgt', 'd': 18, 'dd': 'tea'} A, B, C, D = [str(a), str(b), str(c), str(d)] print(A, B, C, D) print(type(A), type(B), type(C), type(D)) 1 1.1 ['a', 'b'] {'c': 'sgt', 'd': 18, 'dd': 'tea'} <class 'str'> <class 'str'> <class 'str'> <class 'str'>
常用操作+內置的方法(*****):
3.1按索引取值(正向、反向取值)
# ---->正向: 0 1 2 3 4 # h e l l o # -5 -4 -3 -2 -1 反向<------- msg = 'hello' print(msg[0],msg[4],msg[-1],msg[-4]) 結果是:h o o e
正向取值從索引0開始,反向取值從索引-1開始
註意:字元串取出的值,只能當做變數值,不可作為變數名。
3.2切片(顧頭不顧尾,步長)
msg = 'hello world' print(msg[2:4:1]) # 起始索引位置2,結束索引位置,顧頭不顧尾,步長1,所以結果:ll print(msg[0:5]) # 起始索引位置0,結束索引位置5,顧頭不顧尾,步長沒有預設為1,所以結果:hello print(msg[:]) # hello world print(msg[::2]) # hlowrd print(msg[::-1]) # 反向切片,dlrow olleh print(msg[-1::]) # 起始位置最右邊d,預設步長為1,所以結果只有 d print(msg[-1::-1]) # dlrow olleh
3.3長度len()
msg = 'hello world' print(len(msg)) # 結果11
計算字元串內索引總個數。
3.4成員運輸in 、not in 判斷小字元串是否存在於一串大字元串中。
msg = 'egon is my fantastic person' print('fan'in msg) print('rs' not in msg) print(not 'egon' not in msg) # True # False # True
3.5 .strip 移除空白
用來去除字元串左右兩邊的字元,不指定的話,預設移除空格。
print(' message '.strip()) print(' messa ge '.strip()) print('abc dmessage dxyz h'.strip('abcdxyzh ')) # message # messa ge # message
strip可用於用戶交互輸入數據時,如果數據中包含了無用的空格,這時就得進行去除空格處理
name = input('your username:').strip() pwd = input('your key:').strip() if name == 'sgt' and pwd == '123': print('登陸成功') else: print('登陸失敗')
3.6切分 .split
按照某種分隔符,切分成列表。
info = 'a:b:c:d' print(info.split(':')) print(info.split(':',2)) # ['a', 'b', 'c', 'd'] # ['a', 'b', 'c:d']
#jion使用:':'.jion(msg1) 用冒號(冒號可替換字元)作為連接符,將純字元串的列表拼接成一個新的字元串 msg1 = ['my', 'age', 'is', '18'] msg2 = ':'.join(msg1) print(msg2, type(msg2)) # my:age:is:18 <class 'str'>
切分的列表必須是純字元串列表
3.7迴圈(取值)
for x in 'hello' print(x) ''' h e l l o '''
3.8以下是需要掌握的操作:
① .strip .lstrip .rstrip 兩邊去*,左邊去*,右邊去*
print('*******login*******'.strip('*')) print('*******login*******'.lstrip('*')) print('*******login*******'.rstrip('*')) # login # login******* # *******login
② .lower .upper 將字母全部變為小寫,或者大寫
print('Ab2cD'.lower()) print('Ab2Cd'.upper()) # ab2cd # AB2CD
③ .startswith .endswith 判斷是否以某種字元開頭或者結尾。
info = 'egon alex sgt' print(info.startswith('egon')) print(info.startswith('e')) print(info.endswith('gt')) print(info.endswith('t')) # True # True # True # True
④ .format的玩法:
通常我們用到format會先說說以前學的格式化輸出:
name = 'egon' age = '18' print('my name is %s,i am %s .' %(name,age))
然而這種輸出有一種局限就是必須是按照前後循序依次對號入座,那麼有沒有一種不需要按順序來,直接就能快速入座的輸出呢?
format就可以做到:
print('my name is {name},i am {age} .'.format(name='egon',age='18'))
還有另外2種表達:
print('my name is {},i am {} .'.format('egon','18')) print('my name is {0}{1},i am {1}{1} .'.format('egon', '18')) # my name is egon,i am 18 . # my name is egon18,i am 1818 .
運用.format快速格式化輸入:
name = input('請輸入您的姓名:') age = input('請輸入您的年齡:') job = input('請輸入您的工作:') sex = input('請輸入您的性別:') print(''' ---------------info {a}--------------- Name : {a} Age : {b} Sex : {c} Job : {d} ---------------end---------------''' .format(a=name, b=age, c=sex, d=job))
⑤ .split . rsplit 切分成列表(0預設從左開始),右切分
info = 'a:b:c:d' print(info.rsplit(':')) print(info.rsplit(':',2)) # ['a', 'b', 'c', 'd'] # ['a:b', 'c', 'd']
⑥ .replace
用法:info.replace('被替換的字元串’,‘替換成的字元串’,替換個數)
info = 'a fantastic man is sgt' print(info.replace('sgt','yl',1)) # a fantastic man is yl
⑦ .isdigit判斷
如果字元串由純數字組成則返回True
print('12345'.isdigit()) print('1234 5'.isdigit()) print('12345 '.isdigit()) print('12345abc'.isdigit()) # True # False # False # False
while True: score = input('>>>>:').strip() if score.isdigit(): score=int(score) if score > 90: print('great!') else: print('rubbish!') break else: print('請輸入純數字')
可以用於用戶交互界面,首先將輸入字元串取空白,然後轉成數字類型,然後判斷是否輸入的是數字,如果是可進行下一步判斷,如果不是,重新輸入
⑧需要瞭解的操作:
#1find rfind index rindex count
print('123 ke123ke'.find('ke')) #4 print('123 ke123ke'.rfind('ke')) # 9 print('123 ke123ke'.index('ke')) #4 print('123 ke123ke'.rindex('ke')) #9 print('123 ke123ke'.count('ke',0,6)) #1 find和index的區別是找不到的時候,find結果是-1,二index結果是報錯 print('123 ke123ke'.find('xxxx')) #-1 print('123 ke123ke'.index('xxxx')) #報錯 print('123 ke123ke'.count('ke',0,6)) #1 #計數,尋找計數字元串,從索引0開始到索引6如果找到一個ke就計1,如果找到2個就計2,以此類推。
#2center ljust rjust zfill
print('egon'.center(11,'*')) # 將egon放到總數為11個字元中間(50個字元包含egon的數量),其他用*號填充。****egon*** print('egon'.ljust(11,'*')) # 將egon放到總數為11個字元中,左對齊,其餘字元用*號填充,egon******* print('egon'.rjust(11,'*')) # 將egon放到總數為11個字元中,右對齊,其餘字元用*號填充,*******egon print('egon'.rjust(11,'0')) # 0000000egon print('egon'.zfill(11)) #總共11個字元,除egon以外其餘從左邊開始用0填充。0000000egon
#3captalize swapcase title
print('abcdef dddddd'.capitalize()) #字元串的首字母大寫Abcdef dddddd print('abcAef dddddd'.swapcase()) #字元串內字母大小寫反轉ABCaEF DDDDDD print('abcAef dddddd'.title()) #字元串內每個單詞的首字母大寫,其他都小寫Abcaef Dddddd
# is數字系列
nums1 = b'2' # bytes nums2 = '2' # 字元串數字 nums3 = '四' # 大寫數字 nums4 = 'Ⅵ' # 羅馬數字 print(nums1.isdigit()) print(nums2.isdigit()) print(nums3.isdigit()) print(nums4.isdigit()) # True # True # False # False isdigit可以判斷bytes和字元串數字為數字。 # 阿拉伯數字組成的字元串 # print(num2.isdecimal()) # print(num3.isdecimal()) # print(num4.isdecimal()) # 阿拉伯數字\中文\羅馬組成的字元串 # print(num2.isnumeric()) # print(num3.isnumeric()) # print(num4.isnumeric())View Code
字元串類型總結
存一個值,有序,不可變類型
四、列表類型
list數據類型轉換:但凡能夠被for迴圈遍歷的數據類型都可以給list轉換成列表類型
res = list('hello') print(res) #['h', 'e', 'l', 'l', 'o'] res = list(123) #數字類型不能被for i in 123 #報錯
常用操作+內置方法
優先掌握的操作:
4.1按索引取值(正向存取+反向存取):
l = ['a', 'b', 'c', 'd', 'e'] print(l[1]) print(l[-2]) print(id(l)) l[4] = 'E' print(l, id(l))
Tip:對不存在的索引會報錯!列表中的字元可以被替換,但是無法新增
但是字典可以新增:
dic = {'a':11} dic['b'] = 22 print(dic) # {'a': 11, 'b': 22}
4.2切片(顧頭不顧尾,步長)
#切片,顧名思義,將列表內的數據按照索引的特征,切取一部分形成新的列表 #例: l = ['x', 'y', 'z', 'm', 'n'] print(l[1:3]) #這裡完整的應該是print(l[1:3:1]),最後那個1是步長,不寫:1的話預設為1.從索引1開始到索引3的數據切出來組成新的列表 print(l[::-1] #這裡是反向切片,前面兩個冒號代表預設,從-1到-5全部切出來 結果為: ['y', 'z', 'm'] ['n', 'm', 'z', 'y', 'x']
4.3長度len
l=['a','b','c','d','e'] print(len(l)) #5
4.4成員運算in 和 not in, 判斷數據在不在列表裡。
l = ['x', 'y', 'z', 'm', 'n'] print('z' in l) #Ture print('a' not in l) #Ture
4.5 [].append()追加,每次只能一個字元(多個的話會報錯)。
[]insert(插入位置緊跟其後的索引值,插入的字元) 插入 ,每次只能插入一個字元
前面說過,列表按索引取值時候,只能替換,不能新增,現在我們用append和insert來對列表進行新增數據,
l = ['x', 'y', 'z', 'm', 'n'] l.append('o') print(l) l.append('q') print(l) #['x', 'y', 'z', 'm', 'n', 'o'] #['x', 'y', 'z', 'm', 'n', 'o', 'q']
這裡的append只能在列表最後面添加數據,不能在任意位置添加。
而insert就可以:
l = ['x', 'y', 'z', 'm', 'n'] l.insert(0,'xoxo') # 在索引號為0的位置前添加數據。 print(l) l.insert(6,'xxoo') #l最大索引是4,如果要想在l最後插入數據,就得將起始索引設為大於最大索引的數。
print(l) #['xoxo', 'x', 'y', 'z', 'm', 'n']
#['xoxo', 'x', 'y', 'z', 'm', 'n','xx00']
4.6 刪除del和remove和pop
#del: l = ['x', 'y', 'z', 'm', 'n'] del l[2] print(l) #['x', 'y', 'm', 'n'] #del是一種刪除通用的操作,沒有返回值 字典也可以刪除 dic = {'a':1} del dic['a'] print(dic) #{}
#remove: l = ['x', 'y', 'z', 'm', 'n'] res = l.remove('m') print(l) print(res) #['x', 'y', 'z', 'n'] #None, 提示:remove刪除的那個元素沒有返回值。
#pop #指定要刪除的那個元素的索引,返回剛刪掉的元素。 l=['a','bbb','c','d','e'] l.pop(-1) #刪除‘e’ res = l.pop(1) print(l) print(res) #['a', 'c', 'd'] #bbb
小練習:隊列:先進先出,後進先出的表達:(需要用到列表的新增append,然後用到列表的刪除並得到返回值;pop)
#先進先出: l = [] l.append('first') l.append('second') l.append('third') print(l) print(l.pop(0)) print(l.pop(0)) print(l.pop(0)) # ['first', 'second', 'third'] # first # second # third # 後進先出 l = [] l.append('first') l.append('second') l.append('third') print(l) print(l.pop(-1)) print(l.pop(-1)) print(l.pop(-1)) #['first', 'second', 'third'] # third # second # first排隊,先進先出、後進先出
4.7 迴圈
l=['a','b','c','d','e'] for item in l: print(item) 結果是: a b c d e
4.8.一些需要瞭解的操作
extend clear reverse sort
# extend l = [] print(id(l)) l.extend('a') print(l, type(l)) print(id(l)) # 1851073943240 # ['a'] <class 'list'> # 1851073943240 #extend主要是講指定字元串、列表加到一個指定的列表當中形成一個更大的列表,extend不能直接添加數字類型,字元串可以。extend
# clear l = [12,123,'abc'] l.clear() print(l) #[]clear
# clear l = [12,123,'abc'] # l.clear() # print(l) # #[] l.reverse() print(l) # ['abc', 123, 12] m = [11,22,'cdf'] print(m[::-1]) #reverse的功能和列表的反向切片類似。將列表發現排列 #['cdf', 22, 11]reverse
l = [12, 123, 2] l1 = ['a', 'b', 'z', 'n'] l.sort() l1.sort() print(l) print(l1) # [2, 12, 123] # ['a', 'b', 'n', 'z'] #註意:sort只能將全部是同總類型的列表進行排列,而且是升序排列。sort