組合數(shù)據(jù)類型
1.序列: 分為 列表---list 和 元組---tuple
相同點(diǎn):都可以包含任何類型的 多個(gè)數(shù)據(jù)帜矾,并且元素之間有順序關(guān)系嫉嘀,訪問元素時(shí) 可以通過下標(biāo)數(shù)值 指定某一個(gè)元素
區(qū)別: 元組是固定數(shù)據(jù)(內(nèi)部元素一旦確定后 不能改變)淀弹, 列表的元素可變
聲明元組: 使用小括號(hào) 表示初始化元素
t=(1,2.5,True,"abc")
聲明列表: 使用中括號(hào) 表示初始化元素
l1=[1,2.5,True,"abc"]
l2=[] # 可聲明空列表债鸡, 之后再增加元素
統(tǒng)一使用方括號(hào) 加下標(biāo)訪問某一個(gè)元素
print(t[0]) # t[0] 表示列表第一個(gè)元素
print(l1[-1]) # l1[-1] 表示訪問倒數(shù) 第一個(gè)元素
可以訪問一個(gè)區(qū)間內(nèi)的所有元素 [n1:n2] 從n1下標(biāo)到n2下標(biāo)之間的所有元素(不包含n2號(hào)元素); [n1:] n1號(hào)下標(biāo)之后的所有元素
字符串 可以當(dāng)做元組 看待捌木, 每一個(gè)字符 就是一個(gè)元素
str1="abcdefghijk"
print(str1[-3:]) # 從倒數(shù)第3到 到最后的元素
print(str1[3:6]) # 獲取3號(hào)到5號(hào)元素
print(str1[3:8:2]) # 獲取3號(hào)到7號(hào)元素中 每間隔一個(gè)元素獲取
修改元素 ,只能對(duì)列表
t[0]=10 元組不支持改變?cè)?
驗(yàn)證 list的常用方法
1.追加元素
l2.append(10)
l2.append(20.5)
print(l2)
2.插入元素
l2.insert(1, True)
print(l2)
3.移除一個(gè)數(shù)值的 元素
l2.remove(20.5)
print(l2)
4.指定元素位置 “彈出”pop 一個(gè)元素
v=l2.pop(0)
print(v)
print(l2)
5.列表內(nèi)部元素排序焕窝, 元素必須都是 數(shù)值類型 才能排序
l3=[5,9,4,8,3,7,2,6,1]
l3.sort() # 默認(rèn) 按升序 排序
print(l3)
l3.sort(reverse=True) # reverse=True 表示 倒序
print(l3.sort(reverse=True))
6.如果對(duì)元組排序
t2=(5,9,4,8,3,7,2,6,1)
print( sorted(t2) )
print(t2)
2.無(wú)序 組合數(shù)據(jù)類型: 集合--set 字典--dict
相同點(diǎn):set 和 dict內(nèi)部 都可以保存 任意類型的多個(gè)數(shù)據(jù)蹬挺,這些數(shù)據(jù)之間沒有順序關(guān)系,所以在獲取 內(nèi)部元素是只能隨機(jī)獲取一個(gè);set 和 dict 的元素都是唯一的它掂, 字典中只是key必須唯一
區(qū)別:set內(nèi)部的每個(gè)元素是單個(gè)數(shù)據(jù)汗侵,dict 內(nèi)部的每一個(gè)元素 是一對(duì)數(shù)據(jù)(稱為 鍵值對(duì))
聲明 set
s1={1,2,3,3,0,True,"abc",False} # 如果元素有重復(fù)會(huì)自動(dòng)去除重復(fù),1 和 True 是一樣的數(shù)據(jù)
print(s1) #因?yàn)?元素是無(wú)序的群发, 所以打印時(shí) 顯示沒有固定順序, 代表獲取元素 是隨機(jī)的
通過列表創(chuàng)建集合
l1=[1,2,3,3]
s2=set(l1) # 把列表轉(zhuǎn)成 集合類型发乔, 過程中 會(huì)自動(dòng) 去除 重復(fù)
print(s2)
聲明字典
d1={1:"a",2:"b",3:"c", "d":4}
d2={"a":"hello", "T":True, "F":False, "F":123 } # 字典的key必須唯一熟妓, 如果重復(fù)了, 取最后出現(xiàn)的 鍵值對(duì)
print(d1)
print(d2)
字典的訪問
1.通過key來訪問對(duì)應(yīng)的 value
print(d1[1],d1["d"])
2.隨機(jī)獲取字典中的 一個(gè)元素(鍵值對(duì))
v2=d1.pop(3)
print(v2)
print(d1)
print(d1.popitem()) # 字典的popitem() 方法隨機(jī)彈出一對(duì)鍵值對(duì)栏尚,彈出后會(huì)從字典中移除
3.字典增加或更新一個(gè)元素
d1[4]="hello" #如果沒有這個(gè)key 就是增加一對(duì) 鍵值對(duì)
print(d1)
d1[4]="world" #更新鍵值對(duì)
print(d1)
集合的訪問
1.只能隨機(jī)彈出一個(gè)元素
print(s1.pop()) # 隨機(jī)彈出一個(gè)元素后 該元素被移除
print(s1)
# s1.remove(3) # 移除的數(shù)據(jù) 必須存在
print(s1)
2.集合增加一個(gè)元素
s1.add("hello")
print(s1)
3.集合運(yùn)算
s3={1,2,3,4,5,6,7,8}
s4={5,6,7,8,9,10,11,12}
print( s3 & s4) # 交集運(yùn)算
print( s3 | s4) # 并集運(yùn)算
print( s3 - s4) # 差集運(yùn)算起愈, 左邊集合中 去掉 和右邊集合中 相同的元素
print( s4 - s3)
print( s3 ^ s4) #補(bǔ)集運(yùn)算, 取出兩個(gè)集合中 唯一的部分译仗, 去掉共同的部分
組合數(shù)據(jù)類型 課堂練習(xí)
1.假設(shè)有ip列表ipList = ["172.31.21.18","172.31.21.19","172.31.21.20",
"172.31.21.18","172.31.21.19","172.31.21.18","172.31.21.23",
"172.31.21.18","172.31.21.20","172.31.21.20","172.31.21.23",
"172.31.21.21"] 計(jì)算出 每個(gè)ip地址出現(xiàn)的次數(shù)
ipList = ["172.31.21.20","172.31.21.19","172.31.21.20","172.31.21.18",
"172.31.21.19","172.31.21.18","172.31.21.23","172.31.21.18",
"172.31.21.20","172.31.21.20","172.31.21.23","172.31.21.20"]
ipset=set(ipList)
c=0
ip=''
for i in ipset:
print(i,"出現(xiàn)了%d次" %ipList.count(i))
if ipList.count(i)>c:
c=ipList.count(i)
ip=i
print("出現(xiàn)次數(shù)最多的ip地址是%s,對(duì)應(yīng)的次數(shù)數(shù)%d" %(ip,c) )
2.給你一個(gè)list, 例如 L = [5, 1, 2, 3, 4, 8,-5] 輸出L的中位數(shù)
#中位數(shù)是指 對(duì)已排序的數(shù)集取其中間數(shù)抬虽,數(shù)集為偶數(shù) 取中間兩數(shù)的平均
l1 = [5, 1, 2, 3, 4, 8, -5,11]
l1.sort() # 對(duì)原始列表元素 排序
print(l1)
if len(l1) % 2 == 0 : # 如果有偶數(shù)個(gè) 元素
print("列表元素的中位數(shù)是", (l1[len(l1) // 2] + l1[len(l1) // 2 - 1]) / 2)
else:
print("列表元素的中位數(shù)是", l1[len(l1) // 2]) # len(l1) // 2 列表元素個(gè)數(shù) “整除”2。 序列下標(biāo)寫小數(shù)會(huì)報(bào)錯(cuò)
3.給你一個(gè)字典a = {1:1, 2:2, 3:3}, 輸出字典a的keys ,以',' 連接纵菌,如 '1,2,3'阐污。
#字符串連接的方法字符串型數(shù)據(jù).join字符串列表
a = {1:1, 2:2, 3:3}
l1=[]
for i in a.keys():
l1.append(str(i))
print(",".join(l1)) # 字符串類型的 join方法拼接的 多個(gè)元素 必須都是 字符串型