這篇文章主要介紹了Python列表、字典、元組和集合實(shí)例分析的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Python列表、字典、元組和集合實(shí)例分析文章都會(huì)有所收獲,下面我們一起來看看吧。
成都創(chuàng)新互聯(lián)始終致力于在企業(yè)網(wǎng)站建設(shè)領(lǐng)域發(fā)展。秉承“創(chuàng)新、求實(shí)、誠信、拼搏”的企業(yè)精神,致力為企業(yè)提供全面的網(wǎng)絡(luò)宣傳與技術(shù)應(yīng)用整體策劃方案,為企業(yè)提供包括“網(wǎng)站建設(shè)、成都響應(yīng)式網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、微信網(wǎng)站建設(shè)、小程序設(shè)計(jì)、商城建設(shè)、平臺(tái)網(wǎng)站建設(shè)秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

什么是列表呢?
變量可以存儲(chǔ)一個(gè)元素,而列表可以存儲(chǔ)N個(gè)元素。
列表相當(dāng)于其他語言中的數(shù)組。
不同的是python中的列表可存儲(chǔ)多個(gè)不同類型的元素。
a=10 #變量存儲(chǔ)的是一個(gè)對(duì)象的id(即地址)lst=['hello','world',98]print(id(lst))print(type(lst))print(lst)

注意:變量存儲(chǔ)的是一個(gè)元素的id,而列表存放的是多個(gè)元素的id,如圖:
lst保存了列表的id,而列表的每一個(gè)位置保存了每一個(gè)元素的id,這樣我們就可以用列表來存儲(chǔ)多個(gè)不同種類的元素。
創(chuàng)建:
① [ , ] 使用中括號(hào),元素與元素間用‘,’ 如 lst1=[‘hello’,‘world’,11]
② 調(diào)用內(nèi)置函數(shù)list() 如lst2=list([‘hello’,‘world’,11])
創(chuàng)建空列表
list3=[]或list3=list()
列表的特點(diǎn):
列表元素按順序有序排列;
索引映射唯一元素;
索引正序?yàn)檎瑥?開始,逆序?yàn)樨?fù),從-1開始;
可存儲(chǔ)重復(fù)數(shù)據(jù);
任意數(shù)據(jù)類型混存;
根據(jù)需要?jiǎng)討B(tài)分配和回收內(nèi)存。
index(元素)
如列表中性存在多個(gè)相同元素,只返回相同元素中第一個(gè)元素的索引;
如果查詢的元素不在列表中,則會(huì)出現(xiàn)錯(cuò)誤ValueError;
可以在指定start和end之間查找。
value=0lst=['hello','world',11,'hello']print(lst.index('hello'))
#0#print(lst.index(value))
報(bào)錯(cuò):找不到#print(lst.index('hello',1.3))
報(bào)錯(cuò):找不到print(lst.index('hello',1,4))
#3正向索引從0到N-1,如 lst[0]
逆向索引從-N到-1,如 lst[-N]
指定索引不存在,出現(xiàn)IndexError
語法:
列表名[start: end :step ]
切片的結(jié)果:原列表片段的拷貝;
切片的范圍:[start,end);
step默認(rèn)為1:簡寫為[start: end]
lst=[10,20,30,40,50,60,70,80,90]lst1=lst[2:6:2]print(lst)print(lst1)print('原列表',id(lst))print('切片',id(lst1))
#切片是一個(gè)新的列表對(duì)象step為正數(shù)時(shí),從start開始往后切片;
切片的第一個(gè)元素默認(rèn)為列表的最后一個(gè)元素;
切片的最后一個(gè)元素默認(rèn)為列表的第一個(gè)元素。
lst=[10,20,30,40,50,60,70,80,90]print(lst[1:6:2]) #[20, 40, 60]print(lst[:6:2]) #[10, 30, 50]print(lst[1::2]) #[20, 40, 60, 80]
step是負(fù)數(shù)時(shí),從start開始往前切片
lst=[10,20,30,40,50,60,70,80,90]print(lst[::-1]) #[90, 80, 70, 60, 50, 40, 30, 20, 10]print(lst[6::-2]) #[70, 50, 30, 10]print(lst[6:0:-2]) #[70, 50, 30]print(lst[:2:-2]) #[90, 70, 50]
語法:
元素 in 列表名
元素 not in 列表名
語法:
for 迭代變量 in 列表名:
操作
print(10 in lst)print(100 not in lst)for item in lst: print(item)
lst=[10,20,30,40,50,60,70,80,90] lst1=['hello','world'] lst2=['python',66,88] #四種方法 #第一種 append() 在列表的末尾添加一個(gè)元素 lst.append(100) print(lst[9]) lst.append(lst1) #將lst1作為一個(gè)元素添加在lst末尾 print(lst) #第二種 extend() 在列表的末尾添加至少一個(gè)元素 lst.extend(lst1) #將lst1作為兩個(gè)元素添加在lst末尾 print(lst) #第三種 insert() 在列表的任意位置添加一個(gè)元素 lst.insert(1,11) #在1處插入11 print(lst) #第四種 切片 在列表的任意位置添加至少一個(gè)元素 lst[1:]=lst2 #實(shí)質(zhì)為在切掉的部分添加一個(gè)列表 print(lst)

lst=[10,20,30,40,50,60,70,80,40] print(lst) #五種方法 #第一種 remove() 一次刪除一個(gè)元素;重復(fù)元素只刪除第一個(gè);元素不存在出錯(cuò)ValueError. lst.remove(40) print(lst) #第二種 pop() 刪除一個(gè)指定索引位置上的元素;不指定索引刪除最后一個(gè)元素;指定索引不存在出錯(cuò)IndexError lst.pop(3) print(lst) #第三種 切片 一次至少刪除一個(gè)元素,但切片會(huì)產(chǎn)生新的列表對(duì)象 new_list=lst[1:3] #使用以下方式則不會(huì): lst[1:3]=[] print(lst) #第四種 clear() 清空列表 lst.clear() print(lst) #第五種 del 刪除列表 del lst print(lst) #報(bào)錯(cuò)

lst=[10,20,30,40,50] print(lst) #第一種 為指定索引的元素賦予一個(gè)新值 lst[1]=11 print(lst) #第二種 為指定的切片賦予一個(gè)新值 lst[1:3:]=[666,777,888,999,] print(lst)

#兩種排序方式
print('第一種方法:')
lst=[11,7,99,86,59,108]
print(lst,id(lst))
#第一種 調(diào)用sort()方法,列表中的所有元素默認(rèn)從小到大排序,
#可以指定reverse=True進(jìn)行降序排序
lst.sort() #相當(dāng)于lst.sort(reverse=False)
print(lst,id(lst)) #升序排序
lst.sort(reverse=True)
print(lst) #降序排序
print('第二種方法:')
lst=[11,7,99,86,59,108]
print(lst,id(lst))
#第二種 調(diào)用內(nèi)置函數(shù)sorted(),可以指定降序排序,原列表不發(fā)生改變,將產(chǎn)生一個(gè)新的列表對(duì)象
new_list=sorted(lst)
print(lst,id(lst))
print(new_list,id(new_list)) #升序排序
desc_list=sorted(lst,reverse=True)
print(desc_list,id(desc_list)) #降序排序
即生成列表的公式。
語法:
列表名=[ 列表元素表達(dá)式 for i in range( , ) ]
注意:表達(dá)式中一般包含自定義變量 i
lst=[i*i for i in range(1,10)] print(lst)#輸出為 [1, 4, 9, 16, 25, 36, 49, 64, 81]
可變序列:進(jìn)行增刪改操作的序列,如列表
不可變序列:不能在原來的基礎(chǔ)上增刪改,如字符串、整數(shù)
字典是python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,與列表一樣是一個(gè)可變序列;
以鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù),字典是一個(gè)無序的序列;(列表單身狗,字典成一對(duì))
語法:例如
scores={ '張三’:99,‘李四’: 66, ‘王五’: 11}
(:之前的稱作鍵,、:之后的叫值)
字典示意圖:(1,2,3代表元素順序)
與列表第一個(gè)元素存在第一個(gè)位置,第二個(gè)元素存在第二個(gè)位置不同,字典中元素的存放位置與進(jìn)入順序無關(guān),而是哈希函數(shù)計(jì)算得出的位置。
字典的實(shí)現(xiàn)原理與我們在現(xiàn)實(shí)中查字典類似,現(xiàn)實(shí)中我們是先根據(jù)偏旁部首或拼音查找對(duì)應(yīng)頁碼,Python中與此類似,是先通過hash函數(shù)計(jì)算元素key值,然后根據(jù)key值找到value。
#字典的創(chuàng)建 兩種方式
#第一種 { }
score={'張三':11,'李四':99,'王五':7}
print(score,type(score))
#第二種 使用內(nèi)置函數(shù)dict()
people=dict(name='蘇沐',age=20)
print(people,type(people))
#空字典
a={} #或a=dict()
print(a,type(a))
score={'張三':11,'李四':99,'王五':7,'age':20}
print(score)
#兩種方法獲取字典中的元素 根據(jù)鍵獲取值
#第一種 ['鍵']
print(score['張三'])
print(score['age'])
#第二種 .get()方法
print(score.get('張三'))
#兩種方法的區(qū)別:
#print(score['蘇沐']) 報(bào)錯(cuò):發(fā)生異常: KeyError
print(score.get('蘇沐')) #正常運(yùn)行,結(jié)果為None
print(score.get('楚風(fēng)',66)) #字典中不存在元素時(shí)輸出設(shè)置的默認(rèn)值兩種方法的區(qū)別:
[]如果字典中不存在指定的key,則會(huì)出現(xiàn)異常
get()如果字典中不存在指定的key,會(huì)返回None,并可以通過參數(shù)設(shè)置默認(rèn)的value,使指定的key不存在時(shí)返回
score={'張三':11,'李四':99,'王五':7,'age':20}
# in 指定的key在字典中返回True
print('張三' in score)
# not in 指定的key在字典中不存在返回True
print('張三' not in score)score={'張三':11,'李四':99,'王五':7,'age':20}
print(score)
# del 刪除某一個(gè)鍵值對(duì)
del score['張三']
print(score)
# clear() 清空字典的元素
score.clear()
print(score)
score={'張三':11,'李四':99,'王五':7,'age':20}
print(score)
score['蘇沐']=66 #添加
print(score)
score['蘇沐']=88 #修改
print(score)
三種方法:
keys() 獲取字典中所有key
values() 獲取字典中所有value
items() 獲取字典中所有key.value鍵值對(duì)
score={'張三':11,'李四':99,'王五':7,'age':20}
print(score)
# keys() 獲取字典中所有key
a=score.keys()
print(a,type(a))
print(list(a)) #可用list將所有key組成的視圖轉(zhuǎn)成列表
# values() 獲取字典中所有value
b=score.values()
print(b,type(b))
print(list(b))
# items() 獲取字典中所有key.value鍵值對(duì)
c=score.items()
print(c,type(c))
print(list(c)) #轉(zhuǎn)換后的list元素為元組。
score={'張三':11,'李四':99,'王五':7,'age':20}for i in score:
print(i,score[i],score.get(i))i輸出的是鍵,后面兩個(gè)輸出的是值
即生成字典的公式
內(nèi)置函數(shù)zip() 將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)元組,然后返回由這些元組組成的列表。
語法:
{ 表示字典key的表達(dá)式:表示字典value的表達(dá)式 for 自定義表示key的變量,自定義表示value的變量 in zip(可迭代對(duì)象1,可迭代對(duì)象2)}
lst1=['Hello','World','Python']
lst2=[10,20,30,40]
a={key:value for key,value in zip(lst1,lst2)}
print(a)
b={key.upper():value for key,value in zip(lst1,lst2)}
print(b)
若兩個(gè)可迭代對(duì)象中元素個(gè)數(shù)不一致,以元素少的那個(gè)為準(zhǔn)。
字典中的所有元素都是一個(gè)key-value鍵值對(duì),key不能重復(fù),重復(fù)會(huì)覆蓋,value可以重復(fù);
字典中的元素是無序的;
字典中的key必須是不可變對(duì)象;(可變序列無法計(jì)算哈希值)
字典也可根據(jù)需要自動(dòng)動(dòng)態(tài)伸縮;
字典會(huì)浪費(fèi)較大的內(nèi)存,是一種使用空間換時(shí)間的數(shù)據(jù)結(jié)構(gòu)。
在字典中我們已經(jīng)知道可變序列與不可變序列下面重申一遍:
可變序列:可以對(duì)序列進(jìn)行增、刪、改操作,對(duì)象地址不發(fā)生改變。如列表、字典
不可變序列:無增刪改操作,如字符串、元組。
所以元組也是Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,是不可變序列
注意:小沐認(rèn)為可變不可變關(guān)鍵看元素的內(nèi)存地址有沒有發(fā)生變化。
三種方式創(chuàng)建
#三種方式創(chuàng)建元組
# 第一種 直接用小括號(hào)()小括號(hào)可省
a=('Python','Hello',11) #或 a='Python','Hello',11
print(a,type(a))
#第二種 使用內(nèi)置函數(shù)tuple()
b=tuple(('Python','yyds',666))
print(b,type(b))
#第三種 只包含一個(gè)元組的元素需要使用逗號(hào)和小括號(hào),不加逗號(hào)系統(tǒng)認(rèn)為是基本數(shù)據(jù)類型int等
c=(888,) #括號(hào)可省,逗號(hào)不能省
print(c,type(c))
#空元組的創(chuàng)建
t1=()
t2=tuple()
可以通過索引的方式輸出元組元素,但要是不知道元素?cái)?shù)目,可以用for in
t=(10,[20,30],40,50) # 第一種 索引 print(t[0]) # 第二種 for in for item in t: print(item)
首先,我們?yōu)槭裁匆獙⒃M設(shè)計(jì)成不可變序列呢?
因?yàn)檫@樣設(shè)計(jì),在多任務(wù)環(huán)境下比如多人協(xié)作時(shí),不會(huì)存在在一個(gè)人操作對(duì)象時(shí)對(duì)象需要加鎖的問題,因?yàn)樵M本身就是不可變序列,只能讀取。我們在程序中也應(yīng)該盡量使用不可變序列。
注意事項(xiàng):
元組中存儲(chǔ)的是對(duì)象的引用(地址)
如果元組中對(duì)象本身是不可變對(duì)象,則不能再引用其他對(duì)象
如果元組中的數(shù)據(jù)是可變對(duì)象,則可變對(duì)象的引用不允許改變,但數(shù)據(jù)可以改變
t=(10,[20,30],40,50) # t[1]=100 報(bào)錯(cuò) t[1].append(10) print(t) #列表是可變序列,可以向列表中添加元素,但列表的內(nèi)存地址不變
集合是Python提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu)之一;
與列表、字典一樣都屬于可變類型的序列;
集合是沒有值value的字典。
所在存儲(chǔ)位置同樣是由哈希函數(shù)計(jì)算得出的。
兩種方式:
注意:同字典中鍵不能重復(fù)一樣,集合中的元素也不能重復(fù)。
#兩種方式
#第一種 {}
s1={'hello','world','python',11}
print(s1,type(s1))
#第二種 使用內(nèi)置函數(shù)set()
s2=set(range(6))
print(s2,type(s2))
s3=set([1,2,5,5,5,9,7,6]) #將列表內(nèi)元素轉(zhuǎn)為集合,同時(shí)去掉重復(fù)元素
print(s3,type(s3))
s4=set((2,11,77,88,66,66)) #將元組轉(zhuǎn)成集合
print(s4,type(s4))
s5=set('python') #字符串轉(zhuǎn)成集合
print(s5,type(s5))
#定義空集合 不能直接用{}否則是空字典
s6=set()
print(s6,type(s6))
#判斷元素是否存在——in not in
s={10,20,30,40,50,99}
print(s)
print(10 in s)
print(100 not in s)#兩種方法 add() update()
s={10,20,30,40,50,99}
print(s)
#第一種 調(diào)用add()方法,一次添加一個(gè)元素
s.add(100)
print(s)
#第二種 調(diào)用update()方法,至少添加一個(gè)元素
s.update({666,888,999}) #給集合添加集合中的所有元素
print(s)
s.update([6666,8888,9999]) #給集合添加列表中的所有元素
print(s)
s.update((66666,88888,99999)) #給集合添加元組中的所有元素
print(s)
#四種方法 remove() discard() pop() clear()
s={10,20,30,40,50,99}
print(s)
#第一種 remove方法,一次刪除一個(gè)指定元素,如果指定元素不存在報(bào)錯(cuò)KeyError
s.remove(99)
print(s)
#第二種 discard()方法,一次刪除一個(gè)指定元素,如果指定元素不存在不出現(xiàn)異常
s.discard(100)
print(s)
#第三種 pop()方法,一次性只刪除一個(gè)任意元素
s.pop() #括號(hào)里不能指定參數(shù)
print(s)
#第四種 clear()方法 清空集合
s.clear()
print(s)
兩個(gè)集合間的關(guān)系主要有相等、子集、超集、交集,我們用代碼看下如何判斷:
s1={10,20,30,40,50,99}
s2={10,20,30}
#判斷相等可以用== != (元素相同即可)
print(s1==s2)
#判斷s2是否是s1的子集可用issubset()方法
print(s2.issubset(s1))
#判斷s1是否是s2的超集可用方法issuperset判斷
print(s1.issuperset(s2))
#判斷兩個(gè)集合沒有交集可用方法isdisjoint進(jìn)行判斷,
print(s1.isdisjoint(s2))s1={10,20,30,40,50,99}
s2={10,20,30,80}
# 1.求交集
print(s1.intersection(s2))
print(s1 & s2)
# 2.求并集
print(s1.union(s2))
print(s1 | s2)
# 3.求差集
print(s1.difference(s2))
print(s1-s2)
# 4.求對(duì)稱差集
print(s1.symmetric_difference(s2))
print(s1^s2)注:數(shù)學(xué)操作之后原集合是不變的。
集合生成式就是用于生成集合的公式。
s={i+2 for i in range(5)}print(s)注意:集合、字典、列表都有生成式,但元組由于為不可變序列無生成式
關(guān)于“Python列表、字典、元組和集合實(shí)例分析”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Python列表、字典、元組和集合實(shí)例分析”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文標(biāo)題:Python列表、字典、元組和集合實(shí)例分析
URL地址:http://chinadenli.net/article4/jpcjie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站策劃、營銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、域名注冊、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)