基本數據類型--數字
bool(布爾型)
只有兩個值True和False,之所以將bool歸類為數字,是因為我們習慣用1表示True,0表示False
int類型
Python中的整數屬於int類型,默認用十進制表示,此外也支持二進制,八進制,十六進制表示方式
float(浮點數)
Python中的float(浮點數)就是數學中的小數(float是有限小數或無限循環小數),在運算中整數和浮點數運算的結果也是一個浮點數 一個浮點數的小數點位置是可變的,Python默認的小數精度是17位,也就是小數點后面16位,越往后越不准。其他語言也同樣的問題。小數不精准是因為在轉換成二進制的過程中會出現無線循環,在約省的時候就會出現偏差
基本數據類型--字符串
字符串是一個有序的字符的集合,用於存儲和表示基本的文本信息,''或'' ''或''' '''中間包含的內容稱之為字符串,字符串只能存一個值,而且是不可變
PS:字符串比較特殊,雖然是不可變的,但是可以被迭代
字符串的操作
切片格式:s[start_index:end_index:strp]: 表示對變量s進行切片索引,start_index表示起始位置,end_index表示結束位置,strp則表示步長
PS:正向索引時候因為是從0開始,所以0-7顯示的對應值其實就是0-6的值。參考索引位置
PS:反向索引是從1開始計數
按索引取值(正向取+反向取) :只能取
s1="hello world"
s1[0] #索引0號位置的值
s1[-1] #反向索引第一個值
s1[-3] #反向索引第三個值
print(s1[-1:-4:-1]) #反向索引1-4的值
切片(顧頭不顧尾從大字符串中切出一個子字符串)
例:順序切片
s=abcdefghijklmn s[0:7:2] #則表示從0-7,步長2,就是從每兩個位置取一個值,輸出則是aceg
例:反轉切片
s=abcdefghijklmn s[::-1] # 倒過來索引,其實就是把值反過來輸出nmlkjihgfedcba
例:順序切片
s=abcdefghijklmn s[::2] #則表示從開始到結束(len的長度范圍呢),步長2,就是每兩個位置取一個值,輸出則是acegikm
例:反轉切片
s=abcdefghijklmn s[::-1][0:7] # 先將s的值倒過來索引,然后輸出0-6位置的值
例:反轉切片
s=abcdefghijklmn s[:2][::-1] #先取前兩位的值,再倒過來輸出
PS:字符串的單引號和雙引號都無法取消特殊字符的含義, 如果想讓引號內所有字符均取消特殊意義,在引號前加r。 如name = r‘l\thf’
PS:unicode字符串與r連用必須在r前面,如name=ur'l\thf'
len(s1) #查看字符串的長度
成員運算in和not in:判斷一個子字符串是否存在於一個大字符串中
msg='my name is alex,alex is dsb' #判斷一個字符串是不是在另一個字符串中
print('alex' in msg)
print('egon' not in msg)
移除
移除空白strip: 移除字符串左右兩邊的字符 (lstrip和rstrip分別是移除左邊和右邊)
name=input('username>>>: ').strip() #這是一種操作,直接在input函數后面跟strip方法,移除用戶輸入的字符前后的空格,括號內可以指定一個
name=name.strip() #也可以這樣重新賦值一次,如果在strip(' * ')括號內指定字符,則可以去除字符串前后被指定的字符,可以指定單個,也可以指定多個 print(msg.strip('*&^$/-?#='))
if name == 'egon':
print('認證成功')
切分
切分split: 把一個有規律的字符串按照某個字符進行切分,切成列表 # rsplit表示從右邊開始
info='root:x:0:0::/root:/bin/bash'
res=info.split(':',maxsplit=-1) #如果maxsplit這個參數沒有指定或者是-1,這時分割次數不會有限制
print(res)
info='' #將下列列表,換成:
userinfo=['root', 'x', '0', '0', '', '/root', '/bin/bash']
for item in userinfo: #即
item+=':'
info+=item
info=info.strip(':')
print(info,type(info))
#用join方法將 ‘,’換成‘:‘
userinfo=['root', 'x', '0', '0', '', '/root', '/bin/bash']
res=':'.join(userinfo)
循環
msg='hello'
for item in msg:
print(item)
講字符串轉換成小寫或大寫
lower() #將字符串全部變成小寫,upper() #將字符串全部變成大寫
x='ABBBBddd1231'
print(x.lower())
print('ABBBBddd2123'.upper())
查找指定字符開頭或自定字符結尾的字符串
startswith() ,endswith() #satrtswith()括號內添加指定的值,就以這個指定的值查找相關開頭的字符串,endswitch()括號內添加指定的值,就以這個指定的值查找相關開頭的字符串
print('alex is sb'.startswith('alex'))
print('alex is sb'.startswith('al'))
print('alex is sb'.endswith('sb'))
格式化字符串傳入參數
幾種方式
msg='my name is %s my age is %s' %('egon',18) #這個利用占位符%來傳入
msg='my name is {name} my age is {age}'.format(age=18,name='egon') #這個利用format()函數來傳入
msg='my name is {} my age is {}'.format(18,'egon') #利用format傳入,如果沒有指定傳入參數,那就按照位置傳入,有點類似占位符%的原理
msg='my name is {0} my age is {0}{1}{1}'.format(18,'egon') #利用format傳入,在想要傳入值得位置寫入數字,那就按照數字的排序對應format括號里值得位置排序傳入
替換字符串內的某個值
msg='alex is alex hahahah alex'
res=msg.replace('alex','SB',1)
什么是列表
在[]內用逗號分隔,可以存放n個任意類型的值,而且可以被迭代
列表的定義:[]內已逗號分隔,按照索引,存放各種數據類型,每個位置代表一個元素
students=['egon','alex','wupeiqi',]
用於標識:存儲多個值的情況,比如一個人有多個愛好
列表的創建
list_test = ['張三','李四','alex']
#或
list_test = list('alex')
#或
list_test = list(['張三','李四','alex'])
列表的特點
特性:
1、可存放多個值
2、按照從左到右的順序定義列表元素,下標從0開始順序訪問,有序的訪問
3、可修改指定索引位置對應的值,可變,可迭代
列表嵌套和取值
存放多個學生的信息:姓名,年齡,愛好
students_info=[['egon',18,['play',]],['alex',18,['play','sleep']]]
students_info[0][2][0] #取出第一個學生的第一個愛好
列表常用操作
索引
names=['egon','alex','kevin']
print(name[0]) #索引0號位置的值
names[-1]=1000 #修改最后一個值
names[3]='aaaa' #修改3號位置的值
切片(顧頭不顧尾,也包含步長)[num:num:num](start,end,step)
i = ['egon','alex','seven','yuan']
i[0:2] # 指輸出從0開始到2的所有內容
i[:2] #由於沒有指定開始位置,python會默認從0開始,所以指輸出2前面所有的內容
i[2:] #指輸出2后面所有的內容
i[:] #指輸出所有的內容
i[::2] #由於沒有指定開始和結束位置,所以python會默認從0開始到最后一個值,所以指每隔2個值提取一次
i[::-1] #指反向切片
列表的添加和刪除
i.append('eva') #將一個值添加到列表的末尾
i.remove('eva') #從列表中刪除一個值
i.pop() #在括號內添加指定數字,就可以刪除列表指定位置的元素.括號內可以指定
del i[0] #用del方法直接刪除指定位置的字符串
i.append('xxxx') #將括號內指定的字符添加至列表的末尾
i.insert(0,'chenwei') #在列表的任意位置添加內容,insert(位置,內容)
查看列表和判定列表中是否包含某個值
len(i) #查看列表的長度
'egon' in i #查看一個值是否包含在列表中,包含則返回True,反則False
i.count('egon') #查看指定元素在列表中出現的次數
i.index('egon')) #計算對象在列表中索引的位置
i.sort(reverse=True) #永久性的將列表按照順序排列,reverse=true則表示相反,括號內不指定則默認reverse=False
i.reverse( ) #把列表元素相反打印,reversed()函數返回的是一個迭代器,而不是一個List,所以需要list函數轉換一下.(參數可以是列表,元組,字符串,不改變原對象)
分割
>>>s = 'hello world'
>>>s.split(' ') 以空格為分隔符,分割字符串
>>>s.split(',') 以逗號為分隔符,分割字符串
PS:分隔符不限定,但是必須根據需求
連接
>>>i = ['hi','eva']
>>>'!'.join(i)
'hi!eva'
例 str = "-"
seq = ("a", "b", "c")
print str.join( seq )
a-b-c
PS:以逗號為分隔符,將字符串以' - '符號連接
什么是元組
與列表相似,列表用[],元組是()表示,元組相當於不可變的列表
如果存的多個值只有取的需求沒有改的需求,用tuple最合適,占用內存最小
特性
1、可存放多個值,而且可存放數字、字符串,還可以存放更加復雜的數據類型
2、元組本身不可修改和改變,如果元組中包含其他可變元素,這些元素可改變
3、按照從左到右的順序定義元組元素,下標從0開始順序訪問,有序的訪問
創建元組
ages = (1,2,3,4,5,6)
#或
ages = tuple(1,2,3,4,5,6)
元組的常用操作
索引
>>>ages = (1,2.3,4,5,6)
>>>ages[0]
1
>>>ages[-1] #反過來索引,第一個位置
6
切片
同list
循環
for age in ages:
print(age)
長度
len(ages)
包含
1 in ages #包含返回True,反則返回False
什么是字典
在{}內用逗號分隔,可以存放多個key:value的值,value可以是任意類型
定義:info={'name':'egon','age':18,'sex':18} #info=dict({'name':'egon','age':18,'sex':18})
用於標識:存儲多個值的情況,每個值都有唯一一個對應的key,可以更為方便高效地取值
字典是Python語言中唯一的映射類型
定義方式:{key1:value1,key2:value2}
1、鍵與值用冒號分開‘:’
2、項與項用逗號分開‘,’
字典特性:
1、key-value(鍵:值的結構)
2、key必須可hash,且必須為不可變數據類型,必須唯一
3、可存放任意多個值、可修改、可以不唯一
4、無序
字典的創建與常見操作
#字典的創建
person = {“name”:”alex”,”age”:20}
#或
person = dict(name='seven',age=20)
#或
person = dict({“name”:”egon”,'age':20})
#或
person = dict((['name','圓圓'],['文州',18]))
注意:
>>>dic = {}.fromkeys(['k1','k2'],[]) #如果這里指定鍵但是不指定值,那么值的默認值就是空none
>>>dic {'k1':[],'k2':[]}
>>>dic['k1'].append(1)
>>>dic {'k1':[1],'k2':[1]}
字典的常見操作
鍵、值、鍵值對
1、dic.keys() 返回一個包含字典所有key的列表
2、dic.values() 返回一個包含字典所有value的列表
3、dic.items() 返回一個包含所有(鍵,值)元組的列表
4、dic.iteritems()、dic.iterkeys()、dic.itervalues()與它們對應的非迭代方法一樣,不同的是它們返回一個迭代子,而不是一個列表
新增
dic[key] = value
dic.update('xxx) #將括號中的所有元素添加到字典中,t可以是另一個集合,一個序列或者支持迭代的任意對象
{}.fromkeys(x,None) #fromkeys() 函數用於創建一個新字典,以序列 seq 中元素做字典的鍵,value 為字典所有鍵對應的初始值 ---Python的語法解釋
查找
1、dic.setdefault(key,None) #查找字典中的key對應的值,如果字典中不存在key鍵,則新增這個鍵,默認None也可以指定,如果存在鍵則返回對應的值
2、dic.get(key(default=None)) #返回指定鍵的值,如果鍵不在字典中,返回一個指定值,默認為None,並不會添加
刪除
1、dic.pop(key[,default])和get方法相似。如果字典中存在key,刪除並返回key對應的value,如果key不存在,且沒有給出default的值,則引發keyerror異常
2、dic.clear() 刪除字典中的所有項或元素
3、del dic[key]
4、dic.popitem() #Python 字典 popitem() 方法隨機返回並刪除字典中的一對鍵和值。如果字典已經為空,卻調用了此方法,就報出KeyError異常
修改
1、dic['key'] = 'new_value' 如果key在字典中存在,‘new_value’將會替代原來的value值
2、dic.update(dic2) 將字典dic2的鍵值對添加到字典dic中
dic={'name':'egon','age':18}
dic['age']=111 #如字典中存在,按照key來修改value的值
dic['sex']='male' #如字典中不存在則新增
查看
1、dic['key'] 返回字典中key對應的值,若key不存在字典中,則報錯
2、dict.get(key,default = None) 返回字典中key對應的值,若key不存在字典中,則返回default的值(default默認為None)
循環
1、for k in dic.keys() #遍歷字典中所有的鍵
2、for k,v in dic.items() #遍歷字典所有鍵,值
3、for v in dic.values() #遍歷字典中所有的值
3、for k in dic #遍歷整個字典
按順序遍歷字典中的所有鍵for k in sorted(dic.keys()),使用函數sorted()來獲得按特定順序排列的鍵列表的副本
如果字典中值很多,最終輸出的列表含大量的重復項,使用(set)集合來剔除,for x in set(dic.values())
長度
len(dic) #查看字典長度
#3、成員運算in和not in :判斷的是key
# dic={'name':'egon','age':18}
# print(18 in dic)
# print('age' in dic)
字典的嵌套
info={ 'name':'egon', 'hobbies':['play','sleep'], 'company_info':{ 'name':'Oldboy', 'type':'education', 'emp_num':40, } } print(info['company_info']['name']) #取公司名 students=[ {'name':'alex','age':38,'hobbies':['play','sleep']}, {'name':'egon','age':18,'hobbies':['read','sleep']}, {'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']}, ] print(students[1]['hobbies'][1]) #取第二個學生的第二個愛好
字典、列表、元組的區別
字典用 { } 表示、列表用 [ ] 表示、元組用() 表示
什么是集合
集合是一個數學概念:由一個或多個確定的元素所構成的整體叫做集合
集合中的元素有三個特征
1、確定性(元素必須可hash)
2、互異性(去重)
3、無序性(集合中的元素沒有先后之分),如集合{3,4,5}和{3,4,5]算作同一個集合
PS:集合存在的意義就在於去重和關系運算
結合的用途
關系運算,去重
定義方式:在{}用逗號分割開多個元素,但是集合內元素的特點
去重的局限性:
被去重的元素必須是不可變類型
不能保證原來的順序
in 和not in #判斷某元素是否在集合內
==和!= #判斷兩個集合是否相等
PS:兩個集合之間一般有三種關系,相交、包含、不想交。在Python中分別用下面的方法判斷
set.isdisjoint(s): #判斷兩個集合是不是相交
set.issuperset(s): #判斷集合是不是包含其他集合,等同於a>=b
set.issubset(s): #判斷集合是不是被其他集合包含,等同於a<b
常用操作+內置的方法
長度 len(set)
合集(|):取兩個集合合並后的結果
A | B
A.union(B)
A.update(B)
交集(&): 取兩個集合共同的部分
A & B
A.intersection(B)
A.intersection_update(B) #用於移除兩個或更多集合中都不重疊的元素,即計算交集, intersection()
方法是返回一個新的集合,而 intersection_update()
方法是在原始的集合上移除不重疊的元素
差集(-): 取存在於左(右)邊結合但不存在與右面集合的元素
A - B)
A.difference(B)
對稱差集(^):例如:取沒有同時在A和B中的值
(A - B) | (B - A)
A ^ B
A.symmetric_difference(B)
關系運算
==
s1={1,2,3}
s2={3,2,1}
print(s1 == s2)
父集:>=
子集:<=
s1={1,2,3,4}
s2={1,2,3}
print(s1 >= s2)
print(s1.issuperset(s2)) #issuperset() 方法用於判斷指定集合的所有元素是否都包含在原始的集合中,如果是則返回 True,否則返回 False
print(s2.issubset(s1)) #issubset() 方法用於判斷集合的所有元素是否都包含在指定集合中,如果是則返回 True,否則返回 False
集合類型其他內置方法(**)
s1={'a','b','c',‘d’}
print(s1.pop()) #隨機彈出一個值,類似於刪除
s1.discard('d') #discard() 方法用於移除指定的集合元素。該方法不同於 remove()
方法,因為 remove()
方法在移除一個不存在的元素時會發生錯誤,而 discard()
方法不會
s1.add('d')
print(s1)
s1={1,2,3}
s2={6,4,5}
print(s1.isdisjoint(s2)) #isdisjoint() 方法用於判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False
列表、元組、字典、集合的區別
列表:用[ ]表示,可修改
元組:元組和列表在結構上沒有什么區別,唯一的差異在於元組是只讀的,不能修改。元組用“()”表示
字典:字典定義了鍵和值之間一對一的關系,但它們是以無序的方式儲存的。定義 Dictionary 使用一對大(花)括號“{ }”
集合:是一個無序不重復元素集, 基本功能包括關系測試和消除重復元素. 集合對象還支持union(聯合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數學運算.由於集合是無序的,所以,sets 不支持 索引, 分片, 或其它類序列(sequence-like)的操作
集合的常用操作
元素的增加 單個元素的增加add(),add的作用和類似列表中的append
對序列的增加update(),而update類似extend方法,update方法可以支持同時傳入多個參數,傳入時會把字符串拆分並無序排列
PS:由於集合有去重功能,所以update在傳入多個參數時候會去除相同的參數,而數字是會順序排列,字符串時隨機排列
集合中元素的刪除
元素的刪除 set.discard(x) #從set中刪除指定的元素x,如果x不在set中,無任何反應
set.remove(x) #從set中刪除指定的元素x,如果x不在set中,則會報錯Traceback
set.pop() #從set中隨機刪除一個元素,如果set為空,則會報錯Traceback
set.clear() #將set中的所有元素清空
PS:可變類型:在id不變的情況下,value可以變,則稱為可變類型,如列表,字典
PS: 不可變類型:value一旦改變,id也改變,則稱為不可變類型(id變,意味着創建了新的內存空間),如元組