網(wǎng)站首頁 編程語言 正文
前言:
前面我們提到了Python
數(shù)據(jù)類型中的內(nèi)置數(shù)值類型與字符串類型。今天學(xué)習(xí)一下Python的序列數(shù)據(jù)類型,要知道的是在Python中沒有數(shù)組這一數(shù)據(jù)結(jié)構(gòu),也沒有提供直接創(chuàng)建數(shù)組的功能,但是可以使用內(nèi)置的序列數(shù)據(jù)類型實(shí)現(xiàn)數(shù)組的某些功能。
一、什么是序列數(shù)據(jù)類型?
序列數(shù)據(jù)類型是Python
中的一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),是一組有順序的元素的集合。
這個(gè)集合內(nèi)可以有多個(gè)元素也可以不包含元素。
總的來說包含元組(tuple
)、列表(list
)、字符串(str
)、字節(jié)數(shù)據(jù)(bytes
與bytearray
)
如果根據(jù)對(duì)象可變不可變進(jìn)行劃分的話
可變序列為:列表、字節(jié)數(shù)組
不可變序列為:字符串、元組、字節(jié)序列
二、序列數(shù)據(jù)類型的基本操作
1.序列的通用方法
支持序列類型的內(nèi)置函數(shù):len()
、max()
、min()
、sum()
。其中使用sum()函數(shù)的時(shí)候
必須是數(shù)值型序列,如果有非數(shù)值型的序列則將拋出TypeError,對(duì)于字符串、字節(jié)數(shù)
據(jù)也會(huì)導(dǎo)致該結(jié)果。其余函數(shù)在使用的時(shí)候?qū)ψ址凑兆值湫蜻M(jìn)行挑選。
2.通過索引訪問數(shù)據(jù)
序列中的各個(gè)類型均是可以迭代的對(duì)象,可以直接使用for 循環(huán)進(jìn)行迭代獲取每一個(gè)數(shù)據(jù)。也可以通過下標(biāo)索引進(jìn)行指定位置上的數(shù)據(jù)獲取。序列的第一個(gè)元素是X[0],序列的最后一個(gè)元素是X[len(X)-1]
。序列的下標(biāo)越界或者不是整數(shù)均會(huì)導(dǎo)致異常。
序列還支持切片操作,如下:
st="asfdcac" #打印所有的數(shù)據(jù) print(st[::]) #逆序打印字符串 print(st[-1::-1])
3.同類型的序列進(jìn)行拼接
序列可以使用操作符+連接兩個(gè)序列,形成一個(gè)新的序列對(duì)象。也可以通過*進(jìn)行序列的重復(fù)。
4.判斷序列成員
在本文中前面提到了可以使用循環(huán)對(duì)序列進(jìn)行迭代,找出每一個(gè)元素除了這一功能,Python中還有直接判斷序列中是否包含某成員
語法規(guī)則如下:
- x in s【如果x在序列s中則為True】
- x not in s【如果x不在序列s中為True】
- s.count(x)【統(tǒng)計(jì)X在序列s中出現(xiàn)的次數(shù)】
- s.index(X)【找到X在s中第一次出現(xiàn)的坐標(biāo),找不到就報(bào)錯(cuò)】
5.序列的排序操作
通過內(nèi)置函數(shù)sorted()
可以對(duì)序列進(jìn)行排序,并將排序后的結(jié)果進(jìn)行返回。
def sorted(*args, **kwargs):
這里可以傳參一個(gè)可迭代的序列,reverse
可以指定升序還是降序當(dāng)reverse
為True時(shí)排序結(jié)果為降序。key參數(shù)是用于計(jì)算比較鍵值的函數(shù)
6.內(nèi)置函數(shù)all()與any()
- 這兩個(gè)函數(shù)的作用就是判斷所有的數(shù)據(jù)是否全為True
- 對(duì)于all()而言所有的成員均為True時(shí)結(jié)果才為True
- 對(duì)于any()而言只要有成員為True時(shí)結(jié)果就為True
7.序列的拆分
①有限個(gè)數(shù)變量進(jìn)行序列的拆分
在本方法下要確定序列的成員個(gè)數(shù)與接受變量個(gè)數(shù)保持一致。
變量1,變量2,變量3=序列
②不確定個(gè)數(shù)成員變量進(jìn)行拆分
本方法使用與接受序列中特定位置的成員,使用*進(jìn)行不確定個(gè)數(shù)成員變量的接受。
每次拆分*控制的變量只允許出現(xiàn)一次。
例如:
?? ?mystr="nfklsdnfj0sd.....asdfl" ?? ?s1,*args,s2=mystr
? ?此時(shí)s1,s2會(huì)分別接收n與l其余的將會(huì)讓args進(jìn)行接受。
三、列表
列表的介紹:
前面提到了列表是一個(gè)可變的序列,意思就是可以直接對(duì)列表對(duì)象本身進(jìn)行修改刪除等操作
列表還是Python中一組有序的數(shù)據(jù)結(jié)構(gòu),在Python中沒有數(shù)組,可以使用列表起數(shù)組的作用(?ω?)
1.創(chuàng)建列表
有三種方法:
- 1.字面量直接創(chuàng)建
- 2.使用list()與可迭代對(duì)象創(chuàng)建
- 3.列表解析表達(dá)式
代碼如下:
# 直接聲明 lis0=list(i for i in range(0,101,10)) print(lis0) lis1=[1,2,3,4] # 迭代器進(jìn)行聲明 lis2=[ i for i in range(0,101,10)] print(lis1,lis2) #字面量 lis3=['Hello',123,'print',bool] print(lis3) '''
2.向列表內(nèi)添加數(shù)據(jù)
代碼如下:
# 直接在列表末尾添加 lis1.append(2) print(lis1) # 切片法添加元素(直接追加另外一個(gè)列表的一部分元素)內(nèi)存地址不變 print(id(lis1)) lis1.extend(lis2) lis1.extend(lis2[1:5]) print(lis1,id(lis1)) # 在指定的位置插入指定的元素999 lis1.insert(1,999) print('11111111111',lis1)
3.刪除列表內(nèi)的數(shù)據(jù)
代碼如下:
# 什么也不填,默認(rèn)刪除的是列表的最后一個(gè)元素 lis1.pop() print(lis1) # 將列表內(nèi)的指定下標(biāo)元素進(jìn)行刪除 lis1.pop(1) print(lis1) # 刪除指定的元素 lis1.remove(80) print(lis1) # 切片法刪除元素 # 切片法刪除元素后,列表的地址會(huì)發(fā)生改變***** print(id(lis1),id(lis1[1:4]),lis1[1:4]) lis1[1:4] # 清空列表 lis1.clear() print(lis1) # 刪除列表(再使用該列表的時(shí)候會(huì)報(bào)錯(cuò)) del lis1 # print(lis1) '''列表內(nèi)元素的修改''' print(lis2) # 對(duì)指定索引的元素進(jìn)行修改 lis2[0]=100 print(lis2) # 切片法修改一段列表 # 會(huì)將新指定的列表,替換掉指定索引區(qū)間的元素,區(qū)間超出的話,會(huì)直接在末尾添加 # 切片內(nèi)的元素個(gè)數(shù),與所要改成的切片元素個(gè)數(shù),不一致沒關(guān)系直接進(jìn)行替換 lis2[10:]=[1,2,3] print(lis2) # del也可以對(duì)指定位置元素進(jìn)行刪除 del lis[1] del lis[2:4] # 也可以直接對(duì)列表的某段進(jìn)行賦空[]達(dá)到刪除的效果 lis2[2:4]=[]
三、元組
元組是不可變序列,所以不支持增刪,這里僅僅對(duì)他的特性以及注意點(diǎn)進(jìn)行介紹。
元組也是一組有序序列,包含零個(gè)或多個(gè)對(duì)象的引用,與列表十分相似但又有許多不同.
具體來說有以下特點(diǎn):
元組是不可變序列僅支持讀取
- 1、不支持添加元素【增】
- 2、不支持刪除元素【刪】
- 3、不支持修改元素(修改操作的步驟是:先刪除、再添加)【改】
- 4、支持2種查找元素【查】
- a、根據(jù)下標(biāo)查找元素,常稱為【訪問】元素,時(shí)間復(fù)雜度為O(1)
- b、根據(jù)元素獲取下標(biāo),常稱為【查找】元素,時(shí)間復(fù)雜度為O(n)
如果元組中只有一個(gè)數(shù)據(jù),那么數(shù)據(jù)后的逗號(hào)不可省略元組的括號(hào)可以省略。
元祖的聲明與遍歷如下:
# 元組的聲明一 s=('Tom',666,'嗨') print(s,type(s)) # 元組的聲明二 p=tuple(('Tom',666,'嗨')) print(p) # 空元組 ss=() print(ss,type(ss)) # 單元素元組--要加,否則會(huì)會(huì)直接轉(zhuǎn)換成字符串類型 sss=('fuck') print(sss,type(sss)) # 元組的括號(hào)可以省略 sss='fuck', print(sss,type(sss)) tp=('nabd',['123',123],'李四') print(tp) # 元組對(duì)應(yīng)位置的元素不會(huì)變,但元組對(duì)應(yīng)位置元素里面的內(nèi)容可以改變 tp[1].insert(1,666) print(tp) # 元組的遍歷 for temp in s: ? ? print(temp)
四、字符串
在前面一篇博客已經(jīng)提到過字符串了,這里就不再啰嗦一遍了。
五、字節(jié)序列
字節(jié)序列可以分為可變字節(jié)序列(bytearray)與不可變字節(jié)序列(bytes)。
使用字面量生成字節(jié)數(shù)列只需要在字符串前加上b即可。
eg:str1=b"Hello world"
也可以使用bytes()
或者bytearray()
進(jìn)行字節(jié)序列的聲明
其中參數(shù)可以傳遞可迭代對(duì)象,只不過可迭代對(duì)象的成員要是在0-255的整數(shù)。bytes
或者bytearray
的方法不接受字符串參數(shù),只接受對(duì)應(yīng)類型的參數(shù)。否則報(bào)錯(cuò)
字節(jié)序列支持序列的基本操作。
可以通過字符串編碼得到字節(jié)序列,也可以通過解碼字符序列得到字符串
使用的函數(shù)是decode()
與encode()
。使用過程要注意編碼、解碼規(guī)則。
總結(jié):
本篇博客針對(duì)Python序列進(jìn)行了講解。序列在學(xué)習(xí)使用Python中還是經(jīng)常使用的,希望大家好好掌握,
原文鏈接:https://blog.csdn.net/apple_51931783/article/details/123066971
相關(guān)推薦
- 2022-11-15 Apache?Doris的Bitmap索引和BloomFilter索引使用及注意事項(xiàng)_Linux
- 2022-09-17 C++實(shí)現(xiàn)圖的遍歷算法(DFS,BFS)的示例代碼_C 語言
- 2022-04-25 一起來看看C語言世界中的結(jié)構(gòu)體_C 語言
- 2023-05-20 工程級(jí)?React?注冊(cè)登錄全棧級(jí)流程分析_React
- 2022-07-08 Python3?Loguru輸出日志工具的使用_python
- 2023-11-11 tensorflow分布式報(bào)錯(cuò):tensorflow.python.framework.errors
- 2022-04-25 Pandas?時(shí)間序列分析中的resample函數(shù)_python
- 2022-10-02 golang?NewRequest/gorequest實(shí)現(xiàn)http請(qǐng)求的示例代碼_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支