首頁 > 軟體

Python語言中的資料型別-序列

2022-02-24 19:01:49

前言:
前面我們提到了Python資料型別中的內建數值型別字串型別。今天學習一下Python的序列資料型別,要知道的是在Python中沒有陣列這一資料結構,也沒有提供直接建立陣列的功能,但是可以使用內建的序列資料型別實現陣列的某些功能。

一、什麼是序列資料型別?

序列資料型別是Python中的一種基礎的資料結構,是一組有順序的元素的集合。
這個集合內可以有多個元素也可以不包含元素。
總的來說包含元組(tuple)、列表(list)、字串(str)、位元組資料(bytesbytearray
如果根據物件可變不可變進行劃分的話

可變序列為:列表、位元組陣列
不可變序列為:字串、元組、位元組序列

二、序列資料型別的基本操作

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語言中的序列內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com