日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

2021小白Python入门学习记录Day3(win10系统、Python3.9、使用Pycharm)python高级数据类型(字符串、列表、元组、字典、集合) 及其操作

發(fā)布時(shí)間:2023/12/16 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021小白Python入门学习记录Day3(win10系统、Python3.9、使用Pycharm)python高级数据类型(字符串、列表、元组、字典、集合) 及其操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

'''

每日更新內(nèi)容為10天前當(dāng)天學(xué)習(xí)內(nèi)容,想通過寫博客的方式復(fù)習(xí)和記錄,歡迎大佬提意見、糾錯(cuò)和萌新學(xué)習(xí)與討論。

'''

目錄

一、序列(字符串、列表、元組)

序列簡介

序列操作

(一)字符串 str

1.字符串定義

2.部分字符串操作

(二)列表? list

1.列表簡介

2.定義一個(gè)列表

3.列表操作

4.列表切片

(三)元組??tuple

1.元組簡介

2.定義一個(gè)元組

3.元組操作和注意事項(xiàng)

4.元組切片

#? ?序列操作內(nèi)置函數(shù)(補(bǔ)充)

二、非序列類型(無序)? 字典和集合

(一)字典 dict

1.字典簡介

2.字典的多種創(chuàng)建方式

3.字典操作

(二)集合? set

1.集合簡介

2.創(chuàng)建一個(gè)集合

3.集合操作

三、部分公有操作: 合并+? ? ? 復(fù)制*? ? ?判斷對象是否存在in

1.合并

2.復(fù)制

3.判斷對象是否存在


一、序列(字符串、列表、元組)

序列簡介

序列:在python當(dāng)中 序列就是一組按照順序排列的值【數(shù)據(jù)集合】

在python中 存在三種內(nèi)置的序列類型:? 字符串、列表、元組

優(yōu)點(diǎn):可以支持索引和切片的操作(有序)

特征:第一個(gè)正索引為0,指向的是左端,第一個(gè)索引為負(fù)數(shù)的時(shí)候,指向的是右端

切片:【高級(jí)特性】可以根據(jù)下標(biāo)來獲取序列對象的任意[部分]數(shù)據(jù)(不會(huì)越界

語法結(jié)構(gòu): 序列名[start:end:step]? ?step默認(rèn)為1 和range()一樣左閉右開 不包含右側(cè)end?

range 默認(rèn)從0開始

序列操作

(部分序列操作在Day6 補(bǔ)上)

此處介紹:

capitalize() #首字母變大寫
endswith/startswith() #判斷是否以x結(jié)束/開始?
find() #檢測x是否在字符串中,返回的是第一個(gè)的下標(biāo)值,沒有找到返回-1
isalnum() #判斷是否是字母和數(shù)字
isalpha() #判斷是否是字母
isdigit() #判斷是否是數(shù)字
islower() #判斷是否是小寫
join() #循環(huán)取出所有值用xx去連接
lower/upper #大小寫轉(zhuǎn)換
swapcase #大寫變小寫,小寫變大寫
lstrip/rstrip/strip #移除左/右/兩側(cè)空格
split() #分割字符串
title() #把每個(gè)單詞的首字母變成大寫
replace(old,new,count=None) #old被換字符串,new替換字符串,count換多少個(gè)。無count表示全部替換
count() #統(tǒng)計(jì)出現(xiàn)的次數(shù)
index() #檢測字符串中是否包含子字符串,返回的是第一個(gè)的下標(biāo)值,沒有找到報(bào)錯(cuò)
len()可獲取字符串長度,列表中的數(shù)據(jù)個(gè)數(shù)
.reverse()反序

后續(xù)補(bǔ)充 序列操作內(nèi)置函數(shù)(在 #序列操作內(nèi)置函數(shù)(補(bǔ)充)):

all() ? #判斷可迭代參數(shù)(str、列表、元組)中所有元素是否都為True 除了0、空(''或None)、False外都算True(空列表,空元組返回True) 類似and
any() #判斷可迭代參數(shù)(str、列表、元組)中是否有一個(gè)元素為True 有一個(gè)為True 就返回True 類似or
sorted() #對所有可迭代的對象進(jìn)行排序操作
list的sort()返回的是對已經(jīng)存在的列表進(jìn)行操作(修改),而內(nèi)建函數(shù)sorted返回的是一個(gè)新的list,而不是在原來的基礎(chǔ)上進(jìn)行的操作
reversed() ? #對所有可迭代的對象進(jìn)行反序操作 ?
list的reverse() ? ?list反轉(zhuǎn) ?對已經(jīng)存在的列表進(jìn)行操作(修改)
zip() # 將可迭代對象中的元素 打包成一個(gè)個(gè)元組組成的列表或者元組? 每項(xiàng)為一個(gè)元組
enumerate() ?將一個(gè)可遍歷的數(shù)據(jù)對象 組合成一個(gè)索引序列 一般用于for循環(huán) 每項(xiàng)為一個(gè)元組
list(enumerate(對象,[start=0]))

(一)字符串 str

1.字符串定義

Test='python' # 定義一個(gè)字符串 print(type(Test)) # 查看數(shù)據(jù)類型 print('獲取第一個(gè)字符%s'%Test[0]) print('獲取第二個(gè)字符%s'%Test[1]) for item in Test: # 序列遍歷 這里是字符串 (列表、元組都適用)print(item,end=' ') # 改變end參數(shù)為空格

運(yùn)行結(jié)果:

?序列的下標(biāo)都是從0開始的Test[0]為第一個(gè)元素

2.部分字符串操作

(1).capitalize() .lower() .upper() #大小寫變換

name='peter' print('姓名首字母轉(zhuǎn)換大寫%s'%name.capitalize()) # .capitalize首字母轉(zhuǎn)換大寫 print(name.lower()) # lower全變小寫 print(name.upper()) # upper全變大寫

運(yùn)行結(jié)果:

(2).strip()? #去除空格? ?lstrip? 、rstrip

a=' hello ' b=a.strip() #去除兩邊空格 print(b) print(a.lstrip()) #刪除左邊空格 print(a.rstrip()) #刪除右邊空格

運(yùn)行結(jié)果:

(3)id()函數(shù)可以查看一個(gè)對象的內(nèi)存地址(變量都能使用,并非序列專用)

通過b=a來復(fù)制字符串? ?只是把a(bǔ)對象的內(nèi)存地址付給了b??

a=' hello ' # 復(fù)制字符串 print('a的內(nèi)存地址%d'%id(a)) # id()函數(shù)可以查看一個(gè)對象的內(nèi)存地址 b=a # 在此只是把a(bǔ)對象的內(nèi)存地址賦給了b print('b的內(nèi)存地址%d'%id(b)) print(b)

運(yùn)行結(jié)果:

?(4).find()?和 .index() 查找? ? ?(find為字符串專用,)

dataStr='I love python p' print(dataStr.find('p')) # .find找到目標(biāo)對象在序列對象的第一個(gè)下標(biāo)值 下標(biāo)值從0開始 print(dataStr.find('love')) # .find找到第一個(gè)字母下標(biāo)值 print(dataStr.find('1')) # .find沒有找到返回-1 print(dataStr.index('p')) #檢測字符串中是否包含子字符串,返回的是第一個(gè)的下標(biāo)值 index沒找到會(huì)報(bào)錯(cuò)

運(yùn)行結(jié)果:

?find 和 index 的區(qū)別:find沒找到時(shí)返回 -1 ;index沒找到會(huì)報(bào)錯(cuò)

都是返回首次找到的下標(biāo)

(5).startswith() 和 .endswith() 首? 尾判斷

dataStr='I love python p' print(dataStr.startswith('I')) #判斷是否為 I 開頭 這里返回True print(dataStr.endswith('s')) #判斷是否以 s 結(jié)束 這里返回False

運(yùn)行結(jié)果:

(6)len() 獲取字符串長度? ? (可以獲取列表或元組的數(shù)據(jù)個(gè)數(shù))

strA='我喜歡python' print(len(strA)) #len()可獲取字符串長度,列表中的數(shù)據(jù)個(gè)數(shù)

運(yùn)行結(jié)果:

(7)split() #分割字符串

a='sad s a 4 6 87' print(a.split(' ')) # 括號(hào)里填寫把什么當(dāng)作分隔符 這里我用空格 返回一個(gè)列表

?運(yùn)行結(jié)果:

?3.字符串切片

# 字符串切片 strMsg='hello world' # slice [start:end:step] print('輸出完整的數(shù)據(jù):'+strMsg) # 輸出完整的數(shù)據(jù) 可以用加號(hào)來合并字符串 print('輸出第一個(gè)字符:'+strMsg[0]) #輸出第一個(gè)字符 print('輸出第一個(gè)到第8個(gè)字符步長為2:'+strMsg[0:9:2]) print('這里取到下標(biāo)為2,3,4的數(shù)據(jù):'+strMsg[2:5]) #不包含右側(cè) 這里取到下標(biāo)為2,3,4的數(shù)據(jù) print('第三個(gè)字符到最后:'+strMsg[2:]) #第三個(gè)字符到最后 print('首位到下標(biāo)為2的數(shù)據(jù):'+strMsg[:3]) #0-2 print('倒序輸出:'+strMsg[::-1]) #倒序輸出 負(fù)號(hào)表示方向從右向左遍歷 print('倒序輸出-3到-8:'+strMsg[-3:-9:-1]) #倒序輸出 負(fù)號(hào)表示方向從右向左遍歷 print('錯(cuò)誤示范:'+strMsg[-3:-2:-1]) #倒序輸出 沒有數(shù)據(jù)

運(yùn)行結(jié)果:

這里注意在序列(字符串、鏈表、元組)中不管是正序還是倒序 每個(gè)字符對應(yīng)的下標(biāo)都是不會(huì)變的

?

切片時(shí)首下標(biāo)和尾下標(biāo) 要按步數(shù)規(guī)定的順序?qū)?#xff08;可以正負(fù)下標(biāo)混用),如果錯(cuò)誤 就會(huì)像錯(cuò)誤示范一樣沒有數(shù)據(jù)輸出

正序和倒序切片時(shí)都不含end下標(biāo)(末位)的字符 (左閉右開)

(二)列表? list

1.列表簡介

列表list:python中非常重要的數(shù)據(jù)結(jié)構(gòu),是一種有序的數(shù)據(jù)集合
特點(diǎn):
1.支持增刪改查
2.列表中的數(shù)據(jù)是可以變化的【數(shù)據(jù)項(xiàng)可以變化,內(nèi)存地址不會(huì)改變】
3.用[]來表示列表類型,數(shù)據(jù)項(xiàng)之間用逗號(hào)來分割,注意:數(shù)據(jù)項(xiàng)可以是任何類型的數(shù)據(jù)
4.支持索引和切片來進(jìn)行操作

2.定義一個(gè)列表

# 列表 li=[] #空列表 li=[1,2,3,'你好'] print(type(li)) print(li)

運(yùn)行結(jié)果:

3.列表操作

append() 追加
insert(位置下標(biāo),插入內(nèi)容) 插入
len() 獲取數(shù)據(jù)個(gè)數(shù) 前面講過
extend() 擴(kuò)展,相當(dāng)于批量追加?
index(查找物,從哪開始查,到哪結(jié)束) #檢測字符串中是否包含子字符串,返回的是第一個(gè)的下標(biāo)值,沒有找到會(huì)報(bào)錯(cuò)
del 刪除
remove() 移除具體數(shù)據(jù)項(xiàng)
pop() 移除某個(gè)下標(biāo)對應(yīng)的數(shù)據(jù)項(xiàng)

我們先定義一個(gè)列表

listA=['abcd',35,11.22,'q1i',True]

?(1).append()? 追加

print('------------追加----------append-------') print('追加之前',listA) listA.append(['fff','ddd']) listA.append('ppap') listA.append(8888) print('追加之后',listA)

運(yùn)行結(jié)果:

?(2).insert(位置下標(biāo),插入內(nèi)容) 插入

print('------------插入----------insert-------') listA.insert(1,'這是我剛插入的數(shù)據(jù)') listA.insert(1,8888) print(listA)

運(yùn)行結(jié)果:

(3).extend()? 擴(kuò)展,相當(dāng)于批量追加?

print('------------批量追加-------extend-------') rsdata=list(range(6)) #強(qiáng)制轉(zhuǎn)換為list對象 0~5 range默認(rèn)從0開始 # print(type(rsdata)) listA.extend(rsdata) listA.extend([888,999,99]) print(listA)

運(yùn)行結(jié)果:

(4)修改

print('------------修改-----------------------') listA[0]=88888 #直接修改對應(yīng)下標(biāo)的項(xiàng) print('修改之后',listA)

運(yùn)行結(jié)果:

(5)del 刪除? ? (del可以用在很多地方 這里不細(xì)講)? 這里新定義了一個(gè)listB

print('------------刪除-------------del-------') listB=list(range(10,30)) #新定義一個(gè)列表 print(listB) #輸出完整列表 del listB[0] #刪除第一項(xiàng)的 print(listB) # 批量刪除 del listB[1:3] #刪除第二到第三項(xiàng) 相當(dāng)于刪除對應(yīng)切片 print(listB)

運(yùn)行結(jié)果:

?(6).remove() 移除具體數(shù)據(jù)項(xiàng)? ?

print('------------移除具體數(shù)據(jù)項(xiàng)-------------remove-------') listB.remove(20) #移除指定項(xiàng) print(listB)

運(yùn)行結(jié)果:

(7).pop() 移除某個(gè)下標(biāo)對應(yīng)的數(shù)據(jù)項(xiàng)

print('------------移除相應(yīng)下標(biāo)的數(shù)據(jù)項(xiàng)-------------pop-------') listB.pop(1) #移除下標(biāo)1對應(yīng)的項(xiàng) print(listB)

?運(yùn)行結(jié)果:

注意:.remove()和.pop()? ?是有區(qū)別的 一個(gè)是移除具體的數(shù)據(jù)項(xiàng)? 后一個(gè)是移除對應(yīng)下標(biāo)的數(shù)據(jù)項(xiàng)

(8).index(查找物,從哪開始查,到哪結(jié)束) #檢測字符串中是否包含子字符串,返回的是第一個(gè)的下標(biāo)值,沒有找到會(huì)報(bào)錯(cuò)

print('------------查找具體數(shù)據(jù)項(xiàng)的下標(biāo)-------------index-------') print(listB.index(19,3,6)) #這里相當(dāng)于是在下標(biāo)為3-5(不含右側(cè)6)(相當(dāng)于第4,5,6項(xiàng))的數(shù)據(jù)項(xiàng)中查找 19 這個(gè)數(shù)據(jù)

?運(yùn)行結(jié)果:

4.列表切片

# 切片 listA=['abcd',35,11.22,'q1i',True] print(listA) #輸出完整的對象 print(listA[0]) #輸出第一個(gè)元素 print(listA[1:3]) #第二個(gè)到第三個(gè)元素 print(listA[2:]) #從第三個(gè)開始到最后所有元素 print(listA[::-1]) #負(fù)數(shù)從右向左開始輸出 print(listA*2) #輸出兩次 輸出多次列表中的數(shù)據(jù)*n

?運(yùn)行結(jié)果:

?序列的切片都是類似的 這里有一個(gè)listA*2? 相當(dāng)于listA+listA 這種操作在序列中都可用

(三)元組??tuple

1.元組簡介

元組tuple:是一種不可變的序列,在創(chuàng)建之后,不能做任何的修改
1.不可變(但是可以更改元組內(nèi)的列表內(nèi)的項(xiàng))比如([0,2],'a',3)的[0,2]內(nèi)數(shù)據(jù)可變
2.用()創(chuàng)建元組類型,數(shù)據(jù)項(xiàng)用逗號(hào)來分割
3.可以是任何的類型
4.定義一個(gè)元組時(shí),當(dāng)元組中只有一個(gè)元素時(shí),要加上逗號(hào),不然解釋器會(huì)當(dāng)作整形來處理
5.同樣支持切片操作

2.定義一個(gè)元組

tupleA=() #空元組 tupleA=('abcde',89,9.12,[11,22,33],(11,2)) print(type(tupleA)) print(tupleA)

運(yùn)行結(jié)果:

3.元組操作和注意事項(xiàng)

(1)更改元組中的列表項(xiàng)(使用上面定義的tupleA)

元組不可變(但是可以更改元組內(nèi)的列表內(nèi)的項(xiàng))比如([0,2],'a',3)的[0,2]內(nèi)數(shù)據(jù)可變

print(type(tupleA[3])) #該數(shù)據(jù)項(xiàng)為列表類型 tupleA[3][0]=12 # 則可以更改元組內(nèi)的列表 相當(dāng)于改變元組下標(biāo)為3的項(xiàng)的列表的首項(xiàng)為12 print(tupleA)

?運(yùn)行結(jié)果:

(2)定義一個(gè)元組時(shí),當(dāng)元組中只有一個(gè)元素時(shí),要加上逗號(hào),不然解釋器會(huì)當(dāng)作整形來處理

tupleB=(1) print(type(tupleB)) # 為int tupleB=('1') print(type(tupleB)) # 為str tupleB=(1,) #此時(shí)才為元組tuple print(type(tupleB))

運(yùn)行結(jié)果:

(3).count() 統(tǒng)計(jì)元素個(gè)數(shù)? 序列通用(字符串使用時(shí)括號(hào)內(nèi)要為字符串類型)

tupleC=(0,1,1,2,3,4,1) print(tupleC.count(1)) #統(tǒng)計(jì)元素個(gè)數(shù)

?運(yùn)行結(jié)果:

4.元組切片

# 元組切片 print(tupleA[2:4]) #切片 print(tupleA[::-1]) # 倒序 print(tupleA[::-2]) # 倒序步長為2 步長決定順序,下標(biāo)不變 print(tupleA[-4:-1:1]) #下標(biāo)0 1 2 3 4 分別負(fù)下標(biāo) -1 -2 -3 -4 -5 且不變 print(tupleA[:0:-1]) # 倒序到第一個(gè) print(tupleA[-1:-4:-1]) print(tupleA[-1:-5:1]) #為空 步數(shù)規(guī)定順序?yàn)檎?而start和end為倒序不一致 則沒有數(shù)據(jù)

?運(yùn)行結(jié)果:

#? ?序列操作內(nèi)置函數(shù)(補(bǔ)充)

all() ? #判斷可迭代參數(shù)(str、列表、元組)中所有元素是否都為True 除了0、空(''或None)、False外都算True(空列表,空元組返回True) 類似and
any() #判斷可迭代參數(shù)(str、列表、元組)中是否有一個(gè)元素為True 有一個(gè)為True 就返回True 類似or
sorted() #對所有可迭代的對象進(jìn)行排序操作
(list的sort()返回的是對已經(jīng)存在的列表進(jìn)行操作(修改),而內(nèi)建函數(shù)sorted返回的是一個(gè)新的list,而不是在原來的基礎(chǔ)上進(jìn)行的操作)
reversed() ? #對所有可迭代的對象進(jìn)行反序操作 ?
(list的reverse() ? ?list反轉(zhuǎn) ?對已經(jīng)存在的列表進(jìn)行操作(修改))
zip() # 將可迭代對象中的元素 打包成一個(gè)個(gè)元組組成的列表或者元組? 每項(xiàng)為一個(gè)元組
enumerate() ?將一個(gè)可遍歷的數(shù)據(jù)對象 組合成一個(gè)索引序列 一般用于for循環(huán) 每項(xiàng)為一個(gè)元組
list(enumerate(對象,[start=0]))

(1)all() ? #判斷可迭代參數(shù)(str、列表、元組)中所有元素是否都為True? ?類似and ? ? ?

? ? ? ? ? 除了0、空(''或None)、False外都算True(空列表,空元組返回True)

# all() print(all([])) #True 空列表,空元組返回True print(all(())) #True 空列表,空元組返回True print(all([1,2,3,4,False])) #False print(all([1,2,3,0])) #False print(all([1,2,3,''])) #False print(all([1,2,3,None])) #False

運(yùn)行結(jié)果:

(2)any() #判斷可迭代參數(shù)(str、列表、元組)中是否有一個(gè)元素為True 有一個(gè)為True 就返回True 類似or

# any() print(any([1,None,'',0,False])) #結(jié)果為True print(any([None,'',0,False])) #False

(3)sorted() #對所有可迭代的對象進(jìn)行排序 但沒有改變原對象

sort()為列表專用 可以改變原列表

# sort()為列表專用 li1=[1,5,6,3] print(li1) # 運(yùn)行結(jié)果:[1, 5, 6, 3] li3=li1 # 前面介紹過這里相當(dāng)于傳的內(nèi)存地址 所以后續(xù)變一個(gè) 兩個(gè)都變 在其他操作中類似 li1.sort() #直接在原列表中排序 print(li3,li1) #運(yùn)行結(jié)果:[1, 3, 5, 6] [1, 3, 5, 6]兩都會(huì)變

?sorted()內(nèi)置函數(shù)就不會(huì)更改原對象

print(sorted(li2)) #[1, 5, 21, 51, 798] 默認(rèn)升序 print(li2) #[1, 5, 798, 51, 21] 不會(huì)變 print(sorted(li2,reverse=False)) #[1,5,21,51,798] reverse=False升序 print(sorted(li2,reverse=True)) #[798,51,21,5,1] reverse=True降序 print(sorted(['a','f','D','S','z'])) #['D','S','a','f','z'] 默認(rèn)先大寫A~Z再小寫a~z print(sorted(['a','f','D','S','z'],key=str.lower)) #['a','D','f','S','z'] # key=str.lower不區(qū)分大小寫a~z排序 tupleA=(10,5,7,4,9) print(sorted(tupleA,reverse=False)) #[4, 5, 7, 9, 10] 排元組返回列表

運(yùn)行結(jié)果:

?(4)reversed() ? #對所有可迭代的對象進(jìn)行反序操作?但沒有改變原對象

reverse()為列表專用??可以改變原列表? 對原列表進(jìn)行反序變換

# reverse()列表專用 lia=[1,5,7,6] lia.reverse() print(lia) # 結(jié)果為:[6, 7, 5, 1] 反序

reversed() 反序但不改變原對象? 打印時(shí)要加上類型

lib=[1,2,3,4,5] print(tuple(reversed(lib))) # 結(jié)果為:(5, 4, 3, 2, 1) 必須加類型 print(list(reversed(lib))) # [5, 4, 3, 2, 1] print(list(reversed(range(10)))) #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

(5)zip() # 將可迭代對象中的元素 打包成一個(gè)個(gè)元組組成的列表或者元組? 每項(xiàng)為一個(gè)元組

# 打印時(shí)必須加上類型? 不然報(bào)錯(cuò)

# zip() print(list(zip([1,2,3],['a','b','c','d','e'],[11,12,13]))) # 打印時(shí)必須加上類型 [(1, 'a', 11), (2, 'b', 12), (3, 'c', 13)] print(tuple(zip([1,2,3],['a','b','c','d','e']))) ((1, 'a'), (2, 'b'), (3, 'c')) print(tuple(zip([1,2,3],))) ((1,), (2,), (3,))

運(yùn)行結(jié)果:

(6)enumerate() ?將一個(gè)可遍歷的數(shù)據(jù)對象 組合成一個(gè)有序號(hào)的索引序列 一般用于for循環(huán) 每項(xiàng)為一個(gè)元組

枚舉序列:這里用列表

# enumerate() #枚舉對象 listobj=['a','b','c','d'] for index,item in enumerate(listobj,start=4): #start默認(rèn)從0開始print(index,item)pass print('------------------------------')

運(yùn)行結(jié)果

?

也可以用來枚舉字典:

# 定義一個(gè)字典 dicobj={} # 錄入鍵值對 dicobj['name']='李飛' dicobj['hobby']='體操' dicobj['pro']='運(yùn)動(dòng)員' print(dicobj) for item in enumerate(dicobj.values()): # 枚舉字典的值 也可以用.key()枚舉健 #用.item()枚舉鍵值組成的元組print(item)

運(yùn)行結(jié)果:

?

二、非序列類型(無序)? 字典和集合

(一)字典 dict

1.字典簡介

字典:也是python中重要的數(shù)據(jù)類型,字典是由'鍵值對'組成的集合,通常使用鍵來訪問數(shù)據(jù),效率非常高,和list一樣,支持對數(shù)據(jù)的添加、修改、刪除
特點(diǎn):
1.不是序列類型 沒有下標(biāo)概念,是一個(gè)無序的 鍵值集合 是python內(nèi)置的高級(jí)數(shù)據(jù)類型
2.用{}來表示字典對象,每個(gè) 鍵值對 用逗號(hào)分隔
3.鍵 必須是不可變的類型【元組,數(shù)字,字符串】,值可以是任意的類型
4.每個(gè)鍵必定是唯一的,如果存在重復(fù)的鍵,后者會(huì)覆蓋前者

2.字典的多種創(chuàng)建方式

(1)直接輸入創(chuàng)建

#字典 dict #如何創(chuàng)建字典 dictA={} #空字典 # print(type(dictA)) #dict類型 dictA={'pro':'游泳','school':'北體'} #直接輸入創(chuàng)建 # print(dictA)

運(yùn)行結(jié)果:

?(2)傳入關(guān)鍵字法創(chuàng)建字典

dicB=dict(wds='wadfasd',agggee=188) # 傳入關(guān)鍵字 print(dicB) #{'wds': 'wadfasd', 'agggee': 188}

運(yùn)行結(jié)果:

?

(3)映射函數(shù)方式來構(gòu)造字典

dicC=dict(zip(['one','tow','three'],[1,2,3])) # 映射函數(shù)方式來構(gòu)造字典 print(dicC) #{'one': 1, 'tow': 2, 'three': 3}

運(yùn)行結(jié)果:

(4)可迭代對象方式來構(gòu)造字典

dicD=dict([('a',1),('b',2),('c',3)]) # 可迭代對象方式來構(gòu)造字典 print(dicD) #{'a': 1, 'b': 2, 'c': 3}

運(yùn)行結(jié)果:

3.字典操作

.keys ?獲取所有鍵
.values 獲取所有值
.items ?獲取所有項(xiàng) ?其中每一項(xiàng)都為一個(gè)元組item=(key,value)
.update({'':}) ?#update更新 或 新增
.pop 或 del 通過鍵刪除? 取出
?

(1)添加字典數(shù)據(jù)? 接著上面(1)的 dictA

#添加字典數(shù)據(jù) dictA['name']='李飛' #key:value 鍵:值 dictA['age']='21' dictA['pos']='運(yùn)動(dòng)員' #結(jié)束添加 print(dictA) #輸出完整的字典 print(len(dictA)) #數(shù)據(jù)長度

運(yùn)行結(jié)果:

(2)通過鍵獲取值或修改值

print(dictA['name']) #通過鍵獲取對應(yīng)的值 dictA['name']='吳凡' #通過鍵修改值 print(dictA)

?運(yùn)行結(jié)果:

(3).update() 更新鍵對應(yīng)的值 或者 新增鍵值對

dictA.update({'age':'19'}) #update修改 dictA.update({'heigh':'1.86'}) #update新增 print(dictA)

運(yùn)行結(jié)果:

(3).keys()? ?.value()? ? .items()

# 獲取所有的鍵 print(dictA.keys()) # 獲取所有的值 print(dictA.values()) # #獲取所有的鍵和值 print(dictA.items())

?運(yùn)行結(jié)果:

(4)挨個(gè)輸出所有鍵值對

for item in dictA.items():print(item) #挨個(gè)輸出所有的鍵和值

運(yùn)行結(jié)果:

結(jié)果為一個(gè)個(gè)的元組

也可以按自己定格式取:

for key,value in dictA.items():print('%s==%s'%(key,value)) #挨個(gè)按格式取

(5)del刪除? 和 pop? 取出

#刪除 del dictA['name'] #刪除 print(dictA)print(dictA.pop('age')) #pop 取出 pop是有返回值的 print(dictA)

?運(yùn)行結(jié)果:

del 是刪除鍵是'name'的條目

?pop() 方法刪除字典給定鍵 key 及對應(yīng)的值,返回值為被刪除的值。key 值必須給出。 否則,返回 default值? 所以pop() 更相當(dāng)于取出

(6)了解字典怎么排序? ? (僅了解)

# 如何排序 # 按字母排序 print(sorted(dictA.items(),key=lambda d:d[0] )) #按照key排序print(sorted(dictA.items(),key=lambda d:d[1] )) #按照value排序

運(yùn)行結(jié)果:

(二)集合? set

1.集合簡介

set(集合) 也是python中的一種數(shù)據(jù)類型,是一個(gè) 無序 且 不重復(fù) 的元素集合 不支持索引和切片 類似于字典 但只有key 沒有value

2.創(chuàng)建一個(gè)集合

# 創(chuàng)建集合 set1={1,2,'a',100} #直接創(chuàng)建 print(type(set1)) # set類型 list1=[1,2,'c','a'] set2=set(list1) #強(qiáng)轉(zhuǎn)為集合 print(set2)

注意:空集合默認(rèn)為字典類型

3.集合操作

# 集合操作內(nèi)置函數(shù) # add() #增添 # clear() #清空 # difference() #a.difference(b) 兩個(gè)集合的差集,a中存在,b中不存在的 也可用a-b # intersection() #a.intersection(b) 取交集 也可用a&b # union() #a.union(b) 取并集 也可用a | b # pop() #隨機(jī)從集合中拿出某個(gè)數(shù)據(jù)(拿出后移除) # discard() #指定數(shù)據(jù)移除 # update() #更新集合 a.update(b) 把b數(shù)據(jù)增添進(jìn)a 改變了a

(1).add() #增添

# add set2.add('python') #增添 print(set2)

運(yùn)行結(jié)果:

注意:集合是無序的 所以每次運(yùn)行結(jié)果都可能不一樣

(2).clear() #清空

# clear set2.clear() #清空 print(set2)

運(yùn)行結(jié)果:

# 下面(3) (4)? (5) 為集合的差集 并集 交集運(yùn)算

(3).difference() #a.difference(b) 兩個(gè)集合的差集,a中存在,b中不存在的 也可用a-b

# # 差集 set1={1,2,'a',100} set3={1,2,3} print(set1.difference(set3)) #a.difference(b) 兩個(gè)集合的差集,a中存在,b中不存在的 print(set1-set3) #a.difference(b)相同作用

?運(yùn)行結(jié)果:

(4).intersection() #a.intersection(b) 取交集 也可用a&b

# 交集 print(set1.intersection(set3)) #a.intersection(b) 取交集 print(set1&set3) #a.intersection(b)相同作用

?運(yùn)行結(jié)果:

(5).union() #a.union(b) 取并集 也可用a | b

# 并集 print(set1.union(set3)) #a.union(b) 取并集 print(set1 | set3) #a.union(b)相同作用

?運(yùn)行結(jié)果:

(6).pop() #隨機(jī)從集合中拿出某個(gè)數(shù)據(jù)(拿出后移除) 相當(dāng)于取出

# pop 隨機(jī)取出 print(set1) qudata=set1.pop() print(qudata) print(set1)

?運(yùn)行結(jié)果:

(7).discard() #指定數(shù)據(jù)移除

# discard() #指定數(shù)據(jù)移除 print(set1) set1.discard(100) print(set1)

?運(yùn)行結(jié)果:

(8).update() #更新集合 a.update(b) 把b數(shù)據(jù)增添進(jìn)a 改變了a

# update set4={3,4,5,'m'} print(set4) print(set3) set4.update(set3) #a.update(b) 把b數(shù)據(jù)增添進(jìn)a 改變了a print(set4)

?運(yùn)行結(jié)果:

(9)set 不重復(fù)特性

set0={1,1,0,0,0,3,3,3} print(set0)

?運(yùn)行結(jié)果:

三、部分公有操作: 合并+? ? ? 復(fù)制*? ? ?判斷對象是否存在in

1.合并

# 合并+ # 字符串合并 strA='人生苦短' strB='我用python' print(strA+strB) # 列表合并 listA=list(range(10)) listB=list(range(10,20)) print(listA+listB)

運(yùn)行結(jié)果:

2.復(fù)制

# 復(fù)制* print(strA*3) print(listA*3)

?運(yùn)行結(jié)果:

3.判斷對象是否存在

# 對象是否存在in print('------字符串------') print('生'in strA) #結(jié)果為Trueprint('-------列表-------') print(10 in listA) #Falseprint('-------字典-------') dictA={'name':'sam'} print('age'in dictA) #False print('name'in dictA) #True print('sam'in dictA) #False 在字典中in 對象只能是鍵 不能是值否則返回Falseprint('--------集合-------') setA={'wuhu',88} print(88 in setA) #True

?運(yùn)行結(jié)果:

感謝你看到最后!? 如果有錯(cuò)誤歡迎留言指正!? ?(一不小心寫了1.4w字)

(前三天生病沒有更新。。。)

總結(jié)

以上是生活随笔為你收集整理的2021小白Python入门学习记录Day3(win10系统、Python3.9、使用Pycharm)python高级数据类型(字符串、列表、元组、字典、集合) 及其操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。