1.序列(sequence):
序列是py中最基本的一種數(shù)據(jù)結(jié)構(gòu)
可變序列
- 列表
不可變序列
- 字符串
- 元組
序列基本操作:
- +可以將相同的序列拼接成一個(gè)序列
- *: 將序列重復(fù)指定次數(shù)
- in : 檢查元素是否存在于指定列表/元組中
- not in:檢查元素是否不存在指定列表/元組中
list=(12,None,'sh',True,3,5,6)+(5,5)
print(list*5)
print(5 in list)
print( 4 not in list)
幾個(gè)函數(shù)
- max():序列中最大元素
- min():序列中最小元素
- index(a,b,c):指定元素在序列中第一次出現(xiàn)時(shí)索引,a為查找元素丑搔,b為起始索引振惰,c為結(jié)束索引尽楔,bc可以省略姑原,如果序列中沒(méi)有,則會(huì)拋出異常
- count(a):統(tǒng)計(jì)指定元素出現(xiàn)的次數(shù)
list = (5, 3,5,8,9)
print(max('15881'))
print(min(list))
print(list.index(5,1,3))
print(list.count(5))
2.列表(List):
list是py中的一個(gè)對(duì)象。我們之前學(xué)習(xí)的對(duì)象只能保存單一的數(shù)據(jù),列表可以保存多個(gè)有序的數(shù)據(jù)牢撼。也可以?xún)?chǔ)存對(duì)象的對(duì)象夏醉。
列表的索引是從0開(kāi)始的爽锥。
列表的創(chuàng)建:
#列表中只有一個(gè)元素
list=[12]
#列表中有多個(gè)元素,并且元素類(lèi)型可以不同
list=[12,None,'sh',True]
#通過(guò)索引獲取列表中的元素授舟,如果索引超出救恨,則會(huì)拋出list index out of range異常
a=list[0] #12
#注意:其也可以逆序訪問(wèn),從-1開(kāi)始
c=list[-2] #sh
# 獲取列表元素?cái)?shù)量
b=len(list)
列表的方法:
- append() :向列表最后添加元素释树,依此只能添加一個(gè)
- insert(a,b): 向列表的指定位置插入元素肠槽,a為要插入的位置,b為角標(biāo)奢啥。需要注意的是,當(dāng)a超出角標(biāo)時(shí)秸仙,會(huì)插入最后一位。其也支持逆序桩盲,當(dāng)超出逆序時(shí)寂纪,會(huì)插入第一位。
- extend(a) :將a序列(列表赌结,元組捞蛋,字符串)元素添加到當(dāng)前列表最后。如果是字符串柬姚,則會(huì)將字符串中每一個(gè)字符當(dāng)成一個(gè)元素拟杉。
- clear(): 清空列表
- pop(a): 根據(jù)索引刪除并返回被刪除的元素。若沒(méi)有指定a角標(biāo)量承,則刪除最后一個(gè)
- del list[a] : 刪除指定角標(biāo)元素
- remove(): 刪除指定元素搬设,如果列表中有多個(gè)相同元素,只會(huì)刪除第一個(gè)
- reverse():反轉(zhuǎn)列表
- sort():對(duì)列表進(jìn)行排序撕捍,默認(rèn)升序拿穴,如果需要降序則需要傳遞 reverse=True 注意:若列表中元素類(lèi)型不同,則無(wú)法排序
list=[12,None,'sh',True]
list.append('s')
list.insert(-8,'a') #之前的0號(hào)元素變?yōu)?號(hào)
a=[1,4]
list.extend(a)
list.extend('asd')
list.pop(1)
#反轉(zhuǎn)
list.reverse()
#降序
a.sort(reverse=True)
print(list)
list.clear()
切片
指從現(xiàn)有列表中忧风,獲取一個(gè)子列表默色。
- 語(yǔ)法1: 列表[起始:結(jié)束]
通過(guò)切片獲取元素時(shí),會(huì)包括起始位置狮腿,不會(huì)包含結(jié)束位置该窗。
切片不會(huì)影響原有列表,會(huì)返回一個(gè)新列表蚤霞。
若省略開(kāi)始位置,則默認(rèn)從頭開(kāi)始截取
省略結(jié)束位置义钉,則默認(rèn)截取到最后
若起始和結(jié)束都省略昧绣,等于創(chuàng)建了一個(gè)列表副本
list=[12,None,'sh',True]
print(list[1:3])
print(list[1:])
print(list[:3])
- 語(yǔ)法2:列表[起始:結(jié)束:步長(zhǎng)]
list=[12,None,'sh',True,3,5,6]
print(list[1:6:2])
print(list[1:6:-1])
#相當(dāng)于逆序隔兩個(gè)打印
print(list[::-2])
3.元組(tuple)
元組是一個(gè)不可變序列,其操作方式基本與列表一樣捶闸,但是少了列表中的增刪改方法夜畴。但是元組創(chuàng)建時(shí)拖刃,有幾個(gè)特殊。
list0=()
# 只有一個(gè)元素時(shí)贪绘,必須加兑牡,不加就是一個(gè)int類(lèi)型變量
list = (5,)
# 當(dāng)元組不是空元組時(shí),括號(hào)可以省略
list1=5,3,5
print(type(list0))
元組的解包(解構(gòu))
解包就是將元組當(dāng)中每一個(gè)元素都賦值給一個(gè)變量
每一次解包里面税灌,最多可以有一個(gè)帶*號(hào)的變量均函。他其實(shí)就是一個(gè)list,他將解包中沒(méi)有對(duì)應(yīng)的元素放入列表中。
list=1,3,4,5,
a,b,c,d,=list
a,*b=list # b= 3菱涤,4苞也,5
a,*b,c=list #b=3,4
print(b)
4.字典(dict)
字典是一種映射的數(shù)據(jù)結(jié)構(gòu),列表存儲(chǔ)數(shù)據(jù)的性能很好粘秆,但是查詢(xún)數(shù)據(jù)的性能很差如迟。
字典中每一個(gè)元素都有唯一的名字,通過(guò)過(guò)指定的key值可以快速找到value攻走,因此殷勘,查詢(xún)?cè)貢r(shí),字典的效率是非澄袈В快的玲销。字典中有多個(gè)鍵值對(duì),每一個(gè)鍵值對(duì)稱(chēng)位item
字典的值可以是任意對(duì)象巩趁, 字典的鍵可以是任意的“不可變對(duì)象” 痒玩,一般使用str
# 創(chuàng)建字典
a=(1,3)
#方式1,因?yàn)樵M也是不可變的议慰,因此可以作為鍵
dictionnary={'name':'h',a:[1,3,'s']}
#使用dict()函數(shù)創(chuàng)建字典蠢古,對(duì)應(yīng)的鍵都是str
dictionnary1=dict(name='hha',age='15')
# 根據(jù)鍵獲取值,若鍵值不存在則報(bào)錯(cuò)
b=dictionnary1['name']
#獲取字典鍵值對(duì)個(gè)數(shù)
len(dictionnary1)
#in/not in 檢查字典中是否包含指定的鍵
print('name' in dictionnary1)
#如果字典中存在此鍵則覆蓋value值,若沒(méi)有則添加鍵值對(duì)
dictionnary1['name']='54'
常用函數(shù):
- get(key,default): 通過(guò)key獲取value
- setdefault(key,default): 向字典中添加鍵值對(duì)别凹,如果key存在則返回value值草讶,若不存在則添加此鍵值對(duì)
- update(dict):將其它字典的添加到當(dāng)前字典,若有重復(fù)鍵炉菲,則添加的會(huì)覆蓋之前的堕战。
- del dict['key']:刪除指定鍵值對(duì)
- popitem():刪除最后一個(gè)鍵值對(duì),刪除之后返回的是包含兩個(gè)元素的元組拍霜,第一個(gè)是刪除的key嘱丢,第二個(gè)是刪除的value。 當(dāng)字典為空時(shí)祠饺,會(huì)拋出異常越驻。
- pop(key,default) :刪除指定的key,default可以省略,如果指定了default默認(rèn)值缀旁,則key不存在時(shí)不會(huì)報(bào)錯(cuò)记劈,直接返回default
- clear():清空字典
- copy():對(duì)字典進(jìn)行淺拷貝,復(fù)制以后的對(duì)象時(shí)相互獨(dú)立的并巍。
a=(1,3)
dictionnary={'name':'h',a:[1,3,'s']}
dictionnary.get('name')
dictionnary.setdefault('age',18)
dictionnary.update({'sex':'man'})
del dictionnary[a]
dictionnary.popitem()
dictionnary.pop('name','None')
b=dictionnary.copy()
b.clear()
dictionnary.setdefault('ss',{'15':77})
#字典嵌套
print(dictionnary['ss']['15'])
5.集合(set)
集合和列表相似目木,其不同點(diǎn)在于
- 集合中只能存儲(chǔ)不可變對(duì)象
- 集合中存儲(chǔ)的對(duì)象是無(wú)序的,非插入有序懊渡,但是集合中相同類(lèi)型元素是有序的
- 集合中元素不能重復(fù)
set={1,3,6,4,5,'f'}
set=set()#空集合
set=set([1,3,4,5]) #將列表/元組轉(zhuǎn)換為集合
#將字典轉(zhuǎn)換為集合刽射,只會(huì)包含鍵
set=set({'name':'he'})
常用函數(shù):
- len():集合元素個(gè)數(shù)
- add():向集合中添加元素。
- update():將一個(gè)集合/序列/字典中的元素添加到當(dāng)前集合中距贷。
- pop():隨機(jī)刪除并返回集合中的元素
- remove(value):刪除集合中指定元素
- clear():清空集合
- copy():淺拷貝
set={1,3,6,4,5,'f'}
len(set)
set.add(7)
set.update([2,3,5,3])
set.pop()
set.remove(3)
print(set)
set.clear()
集合的運(yùn)算
在對(duì)集合做運(yùn)算時(shí)柄冲,不會(huì)影響原來(lái)的集合,會(huì)返回一個(gè)新的結(jié)果忠蝗。
如果a集合中的元素全部都在b集合中出現(xiàn)现横,那么a集合就是b集合的子集,b集合是a集合超集
- &:交集運(yùn)算
- | :并集運(yùn)算
- -:差集運(yùn)算
- ^ :異或集:獲取只在一個(gè)集合中出現(xiàn)的元素
- <=:檢查一個(gè)集合是否是另一個(gè)集合的子集
- <:檢查一個(gè)集合是不是另一個(gè)集合的真子集
- > : 檢查一個(gè)集合是不是另一個(gè)的真超集
- >=:檢查一個(gè)集合是否是另一個(gè)的超集
a={1,4,5,7}
b={1,4,5,7,3,6}
print(a&b) #{1, 4, 5, 7}
print(a|b) #{1, 3, 4, 5, 6, 7}
print(a^b) #{3, 6}
print(a<=b) #True
print(a<b) #True
print(a>b) #False
print(a>=b) #False