(3)基本數據類型(字符串、列表、字典、元組、集合)以及切片和常用操作


基本數據類型--數字

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變,意味着創建了新的內存空間),如元組

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM