Python語言中的數據類型-序列
前言:
前面我們提到瞭Python
數據類型中的內置數值類型與字符串類型。今天學習一下Python的序列數據類型,要知道的是在Python中沒有數組這一數據結構,也沒有提供直接創建數組的功能,但是可以使用內置的序列數據類型實現數組的某些功能。
一、什麼是序列數據類型?
序列數據類型是Python
中的一種基礎的數據結構,是一組有順序的元素的集合。
這個集合內可以有多個元素也可以不包含元素。
總的來說包含元組(tuple
)、列表(list
)、字符串(str
)、字節數據(bytes
與bytearray
)
如果根據對象可變不可變進行劃分的話
可變序列為:列表、字節數組
不可變序列為:字符串、元組、字節序列
二、序列數據類型的基本操作
1.序列的通用方法
支持序列類型的內置函數:len()
、max()
、min()
、sum()
。其中使用sum()函數的時候
必須是數值型序列,如果有非數值型的序列則將拋出TypeError,對於字符串、字節數
據也會導致該結果。其餘函數在使用的時候對字符按照字典序進行挑選。
2.通過索引訪問數據
序列中的各個類型均是可以迭代的對象,可以直接使用for 循環進行迭代獲取每一個數據。也可以通過下標索引進行指定位置上的數據獲取。序列的第一個元素是X[0],序列的最後一個元素是X[len(X)-1]
。序列的下標越界或者不是整數均會導致異常。
序列還支持切片操作,如下:
st="asfdcac" #打印所有的數據 print(st[::]) #逆序打印字符串 print(st[-1::-1])
3.同類型的序列進行拼接
序列可以使用操作符+連接兩個序列,形成一個新的序列對象。也可以通過*進行序列的重復。
4.判斷序列成員
在本文中前面提到瞭可以使用循環對序列進行迭代,找出每一個元素除瞭這一功能,Python中還有直接判斷序列中是否包含某成員
語法規則如下:
- x in s【如果x在序列s中則為True】
- x not in s【如果x不在序列s中為True】
- s.count(x)【統計X在序列s中出現的次數】
- s.index(X)【找到X在s中第一次出現的坐標,找不到就報錯】
5.序列的排序操作
通過內置函數sorted()
可以對序列進行排序,並將排序後的結果進行返回。
def sorted(*args, **kwargs):
這裡可以傳參一個可迭代的序列,reverse
可以指定升序還是降序當reverse
為True時排序結果為降序。key參數是用於計算比較鍵值的函數
6.內置函數all()與any()
- 這兩個函數的作用就是判斷所有的數據是否全為True
- 對於all()而言所有的成員均為True時結果才為True
- 對於any()而言隻要有成員為True時結果就為True
7.序列的拆分
①有限個數變量進行序列的拆分
在本方法下要確定序列的成員個數與接受變量個數保持一致。
變量1,變量2,變量3=序列
②不確定個數成員變量進行拆分
本方法使用與接受序列中特定位置的成員,使用*進行不確定個數成員變量的接受。
每次拆分*控制的變量隻允許出現一次。
例如:
mystr="nfklsdnfj0sd.....asdfl" s1,*args,s2=mystr
此時s1,s2會分別接收n與l其餘的將會讓args進行接受。
三、列表
列表的介紹:
前面提到瞭列表是一個可變的序列,意思就是可以直接對列表對象本身進行修改刪除等操作
列表還是Python中一組有序的數據結構,在Python中沒有數組,可以使用列表起數組的作用(✪ω✪)
1.創建列表
有三種方法:
- 1.字面量直接創建
- 2.使用list()與可迭代對象創建
- 3.列表解析表達式
代碼如下:
# 直接聲明 lis0=list(i for i in range(0,101,10)) print(lis0) lis1=[1,2,3,4] # 迭代器進行聲明 lis2=[ i for i in range(0,101,10)] print(lis1,lis2) #字面量 lis3=['Hello',123,'print',bool] print(lis3) '''
2.向列表內添加數據
代碼如下:
# 直接在列表末尾添加 lis1.append(2) print(lis1) # 切片法添加元素(直接追加另外一個列表的一部分元素)內存地址不變 print(id(lis1)) lis1.extend(lis2) lis1.extend(lis2[1:5]) print(lis1,id(lis1)) # 在指定的位置插入指定的元素999 lis1.insert(1,999) print('11111111111',lis1)
3.刪除列表內的數據
代碼如下:
# 什麼也不填,默認刪除的是列表的最後一個元素 lis1.pop() print(lis1) # 將列表內的指定下標元素進行刪除 lis1.pop(1) print(lis1) # 刪除指定的元素 lis1.remove(80) print(lis1) # 切片法刪除元素 # 切片法刪除元素後,列表的地址會發生改變***** print(id(lis1),id(lis1[1:4]),lis1[1:4]) lis1[1:4] # 清空列表 lis1.clear() print(lis1) # 刪除列表(再使用該列表的時候會報錯) del lis1 # print(lis1) '''列表內元素的修改''' print(lis2) # 對指定索引的元素進行修改 lis2[0]=100 print(lis2) # 切片法修改一段列表 # 會將新指定的列表,替換掉指定索引區間的元素,區間超出的話,會直接在末尾添加 # 切片內的元素個數,與所要改成的切片元素個數,不一致沒關系直接進行替換 lis2[10:]=[1,2,3] print(lis2) # del也可以對指定位置元素進行刪除 del lis[1] del lis[2:4] # 也可以直接對列表的某段進行賦空[]達到刪除的效果 lis2[2:4]=[]
三、元組
元組是不可變序列,所以不支持增刪,這裡僅僅對他的特性以及註意點進行介紹。
元組也是一組有序序列,包含零個或多個對象的引用,與列表十分相似但又有許多不同.
具體來說有以下特點:
元組是不可變序列僅支持讀取
- 1、不支持添加元素【增】
- 2、不支持刪除元素【刪】
- 3、不支持修改元素(修改操作的步驟是:先刪除、再添加)【改】
- 4、支持2種查找元素【查】
- a、根據下標查找元素,常稱為【訪問】元素,時間復雜度為O(1)
- b、根據元素獲取下標,常稱為【查找】元素,時間復雜度為O(n)
如果元組中隻有一個數據,那麼數據後的逗號不可省略元組的括號可以省略。
元祖的聲明與遍歷如下:
# 元組的聲明一 s=('Tom',666,'嗨') print(s,type(s)) # 元組的聲明二 p=tuple(('Tom',666,'嗨')) print(p) # 空元組 ss=() print(ss,type(ss)) # 單元素元組--要加,否則會會直接轉換成字符串類型 sss=('fuck') print(sss,type(sss)) # 元組的括號可以省略 sss='fuck', print(sss,type(sss)) tp=('nabd',['123',123],'李四') print(tp) # 元組對應位置的元素不會變,但元組對應位置元素裡面的內容可以改變 tp[1].insert(1,666) print(tp) # 元組的遍歷 for temp in s: print(temp)
四、字符串
在前面一篇博客已經提到過字符串瞭,這裡就不再囉嗦一遍瞭。
五、字節序列
字節序列可以分為可變字節序列(bytearray)與不可變字節序列(bytes)。
使用字面量生成字節數列隻需要在字符串前加上b即可。
eg:str1=b"Hello world"
也可以使用bytes()
或者bytearray()
進行字節序列的聲明
其中參數可以傳遞可迭代對象,隻不過可迭代對象的成員要是在0-255的整數。bytes
或者bytearray
的方法不接受字符串參數,隻接受對應類型的參數。否則報錯
字節序列支持序列的基本操作。
可以通過字符串編碼得到字節序列,也可以通過解碼字符序列得到字符串
使用的函數是decode()
與encode()
。使用過程要註意編碼、解碼規則。
總結:
本篇博客針對Python序列進行瞭講解。序列在學習使用Python中還是經常使用的,希望大傢好好掌握,
到此這篇關於Python語言中的數據類型-序列的文章就介紹到這瞭,更多相關Python語言中的序列內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python數據類型bytes 和 bytearray的使用與區別
- Python的列表和元組詳情
- Python數據結構之列表與元組詳解
- python快速入門題目詳解
- Python列表排序 list.sort方法和內置函數sorted用法