詳細介紹Python3資料結構知識點

2022-04-06 19:00:07
本篇文章給大家帶來了關於的相關知識,其中主要介紹了資料結構的相關問題,包括了數位、字串、列表、元組、字典等等的相關內容,希望對大家有幫助。

推薦學習:

數位 Number

  • 整型(int) - 通常被稱為是整型或整數,是正或負整數,不帶小數點。Python3 整型是沒有限制大小的,可以當作 Long 型別使用。布林(bool)是整型的子型別。

  • 浮點型(float) - 浮點型由整數部分與小數部分組成,浮點型也可以使用科學計數法表示(2.5e2 = 2.5 x 102 = 250)

  • 複數( (complex)) - 複數由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示, 複數的實部a和虛部b都是浮點型。

數位型別轉換

  • int(x) 將x轉換為一個整數。

  • float(x) 將x轉換到一個浮點數。

  • complex(x) 將x轉換到一個複數,實數部分為 x,虛數部分為 0。

  • complex(x, y) 將 x 和 y 轉換到一個複數,實數部分為 x,虛數部分為 y。x 和 y 是數位表示式。

數位運算

# + - * / %(取餘) **(冪運算)
# 整數除法中,除法 / 總是返回一個浮點數,
# 如果只想得到整數的結果,丟棄可能的分數部分,可以使用運運算元 //
print(8 / 5)  # 1.6
print(8 // 5)  # 1
# 注意:// 得到的並不一定是整數型別的數,它與分母分子的資料型別有關係
print(8 // 5.0)  # 1.0
# 使用 ** 操作來進行冪運算
print(5 ** 2)  # 5的平方 25

字串 str

字串的查詢

  • index():查詢子串substr第一次出現的位置,如果查詢的子串不存在時,則丟擲ValueErrorrindex()異常

  • rindex():查詢子串substr最後一次出現的位置,如果查詢的子串不存在時,則丟擲ValueError()異常

  • find():查詢子串substr第一次出現的位置,如果查詢的子串不存在時,則返回-1

  • rfind():查詢子串substr最後一次出現的位置,如果查詢的子串不存在時,則返回-1

s = 'hello, hello'
print(s.index('lo'))  # 3
print(s.find('lo'))  # 3
print(s.find('k'))  # -1
print(s.rindex('lo'))  # 10
print(s.rfind('lo'))  # 10

字串大小寫轉換

  • upper():把字串中所有字元都轉成大寫字母

  • lower():把字串中所有字元都轉成小寫字母

  • swapcase():把字串中所有大寫字母轉成小寫字母,把所有小寫字母都轉成大寫字母

  • capitalize():把第一個字元轉換為大寫,把其餘字元轉換為小寫

  • title():把每個單詞的第一個字元轉換為大寫,把每個單詞的剩餘字元轉換為小寫

s = 'hello, Python'
print(s.upper())  # HELLO, PYTHON
print(s.lower())  # hello, python
print(s.swapcase())  # HELLO, pYTHON
print(s.capitalize())  # Hello, python
print(s.title())  # Hello, Python

字串對齊

  • center():居中對齊,第1個引數指定寬度,第2個引數指定填充符,預設是空格,如果設定寬度小於實際寬度則返回原字串

  • ljust():左對齊,第1個引數指定寬度,第2個引數指定填充符,預設是空格,如果設定寬度小於實際寬度則返回原字串

  • rjust():右對齊,第1個引數指定寬度,第2個引數指定填充符,預設是空格,如果設定寬度小於實際寬度則返回原字串

  • zfill():右對齊,左邊用0填充,該方法只接收一個引數,用於指定字串的寬度,如果指定的寬度小於等於字串的長度,返回字串本身

s = 'hello,Python'
'''居中對齊'''
print(s.center(20, '*'))  # ****hello,Python****
'''左對齊 '''
print(s.ljust(20, '*'))  # hello,Python********
print(s.ljust(5, '*'))  # hello,Python
'''右對齊'''
print(s.rjust(20, '*'))  # ********hello,Python
'''右對齊,使用0進行填充'''
print(s.zfill(20))  # 00000000hello,Python
print('-1005'.zfill(8))  # -0001005

字串拆分、切片

拆分

  • split(): 從字串的左邊開始拆分
  • rsplit():從字串的右邊開始拆分
    • 預設的拆分字元是空格,返回值是一個列表
    • 通過引數 sep 指定拆分字串的拆分符
    • 通過引數 maxsplit 指定拆分宇符串時的最大拆分次數,在經過最大次數拆分之後,剩餘的子串會單獨做為一部分
s = 'hello word Python'
print(s.split())  # ['hello', 'word', 'Python']
s1 = 'hello|word|Python'
print(s1.split(sep='|'))  # ['hello', 'word', 'Python']
print(s1.split('|', 1))  # ['hello', 'word|Python'] # 左側開始
print(s1.rsplit('|', 1))  # ['hello|word', 'Python'] # 右側開始

切片

s = 'hello,world'
print(s[:5])  # hello 從索引0開始,到4結束
print(s[6:])  # world 從索引6開始,到最後一個元素
print(s[1:5:1])  # ello 從索引1開始,到4結束,步長為1
print(s[::2])  # hlowrd 從開始到結束,步長為2
print(s[::-1])  # dlrow,olleh 步長為負數,從最後一個元素(索引-1)開始,到第一個元素結束
print(s[-6::1])  # ,world 從索引-6開始,到最後一個結束

字串判斷相關

  • isidentifier():判斷指定的字串是不是合法的識別符號
  • isspace():判斷指定的字串是否全部由空白字元組成(回車、換行,水平製表符)
  • isalpha():判斷指定的字串是否全部由字母組成
  • isdecimal():判斷指定字串是否全部由十進位制的數位組成
  • isnumeric():判斷指定的字串是否全部由數位組成
  • isalnum():判斷指定字串是否全部由字母和數位組成

字串其他操作

字串替換

  • replace()
s = 'hello,Python,Python,Python'
print(s.replace('Python', 'Java'))  # 預設全部替換 hello,Java,Java,Java
print(s.replace('Python', 'Java', 2))  # 設定替換個數 hello,Java,Java,Python

字串連線

  • join()
lst = ['hello', 'java', 'Python']
print(','.join(lst))  # hello,java,Python
print('|'.join(lst))  # hello|java|Python

格式化字串輸出

  • %預留位置:輸出前加%,多個引數用小括號和逗號
    • %s 字串
    • %i 或%d 整數
    • -%f 浮點數
  • {}預留位置: 呼叫format()方法
  • f-string:把變數寫在{}中
name = '張三'
age = 20
print('我叫%s, 今年%d歲' % (name, age))
print('我叫{0}, 今年{1}歲,小名也叫{0}'.format(name, age))
print(f'我叫{name}, 今年{age}歲')
# 我叫張三, 今年20歲
# 我叫張三, 今年20歲,小名也叫張三
# 我叫張三, 今年20歲

設定數位的寬度和精度

# 設定數位的寬度和精度
'''%佔位'''
print('%10d' % 99)  # 10表示寬度
print('%.3f' % 3.1415926)  # .3f表示小數點後3位
print('%10.3f' % 3.1415926)  # 同時設定寬度和精度
'''{}佔位 需要使用:開始'''
print('{:.3}'.format(3.1415926))  # .3表示3位有效數位
print('{:.3f}'.format(3.1415926))  # .3f表示小數點後3位
print('{:10.3f}'.format(3.1415926))  # .3f表示小數點後3位
#        99
#3.142
#     3.142
#3.14
#3.142
#     3.142

字串編碼

s = '但願人長久'
# 編碼 將字串轉換成byte(二進位制)資料
print(s.encode(encoding='gbk')) #gbk,中文佔用2個位元組
print(s.encode(encoding='utf-8')) #utf-8,中文佔用3個位元組
# 解碼 將byte(二進位制)轉換成字串資料
# 編碼與解碼中,encoding方式需要一致
byte = s.encode(encoding='gbk')
print(byte.decode(encoding='gbk'))
# b'\xb5\xab\xd4\xb8\xc8\xcb\xb3\xa4\xbe\xc3'
# b'\xe4\xbd\x86\xe6\x84\xbf\xe4\xba\xba\xe9\x95\xbf\xe4\xb9\x85'
# 但願人長久

列表 list

列表的特點

  • 有序序列

  • 索引對映唯一個資料

  • 可以儲存重複資料

  • 任意資料型別混存

  • 根據需要動態分配和回收記憶體

列表的建立

  • []:使用中括號
  • list():使用內建函數list()
  • 列表生成式
    • 語法格式:[i*i for i in range(i, 10)]

    • 解釋:i表示自定義變數,i*i表示列表元素的表示式,range(i, 10)表示可迭代物件

      print([i * i for i in range(1, 10)])# [1, 4, 9, 16, 25, 36, 49, 64, 81]

列表元素的查詢

  1. 判斷指定元素在列表中是否存在
in / not in
  1. 列表元素的遍歷
for item in list:
	print(item)
  1. 查詢元素索引
list.index(item)
  1. 獲取元素
list = [1, 4, 9, 16, 25, 36, 49, 64, 81]print(list[3])  # 16print(list[3:6])    # [16, 25, 36]

列表元素的增加

  • append():在列表的末尾新增一個元素

  • extend():在列表的末尾至少新增一個元素

  • insert0:在列表的指定位置新增一個元素

  • 切片:在列表的指定位置新增至少一個元素

列表元素的刪除

  • rerove():一次刪除一個元素,
    重複元素只刪除第一個,
    元素不存在丟擲ValceError異常

  • pop():刪除一個指定索引位置上的元素,
    指定索引不存在丟擲IndexError異常,
    不指定索引,刪除列表中最後一個元素

  • 切片:一次至少刪除一個元素

  • clear0:清空列表

  • del:刪除列表

列表元素的排序

  • sort(),列表中的所有元素預設按照從小到大的順序進行排序,可以指定reverse= True,進行降序排序,是對原列表的操作。
list.sort()
  • sorted(),可以指定reverse—True,進行降序排序,原列表不發生改變,產生新的列表。
sorted(list)

知識點總結

在這裡插入圖片描述

元組 tuple

元組的特點

Python的元組與列表類似,不同之處在於元組的元素不能修改。

元組使用小括號,列表使用方括號

元組的建立

  • 直接使用小括號(), 小括號可以省略
t = ('Python', 'hello', 90)
  • 使用內建函數tuple(), 若有多個元素必須加小括號
tuple(('Python', 'hello', 90))
  • 只包含一個元素的元組,需要使用小括號和逗號
t = (10,)

知識點總結

在這裡插入圖片描述

字典 dict

字典的特點

  • 以鍵值對的方式儲存,key唯一
  • key必須是不可變物件
  • 字典是可變序列
  • 字典是無序序列 (注意:自Python3.7本後,dict 物件的插入順序保留性質已被宣告為 Python 語言規範的正式部分。即,Python3.7之後,字典是有序序列,順序為字典的插入順序)

字典的建立

  • {}:使用花括號
  • 使用內建函數dict()
  • zip():字典生成式
items = ['fruits', 'Books', 'Others']
prices = [12, 36, 44]
d = {item.upper(): price for item, price in zip(items, prices)}
print(d)    # {'FRUITS': 12, 'BOOKS': 36, 'OTHERS': 44}

字典元素的獲取

  • []:[]取值
    scores[‘張三’],若key不存在,丟擲keyError異常
  • get():get()方法取值,若key不存在,返回None,還可以設定預設返回值

字典元素的新增

user = {"id": 1, "name": "zhangsan"}
user["age"] = 25
print(user)  # {'id': 1, 'name': 'zhangsan', 'age': 25}

字典元素的修改

user = {"id": 1, "name": "zhangsan", "age": 25}
user["age"] = 18
print(user)  # {'id': 1, 'name': 'zhangsan', 'age': 18}

字典元素的刪除

  • del :刪除指定的鍵值對或者刪除字典
user = {"id": 1, "name": "zhangsan"}del user["id"]print(user)	# {'name': 'zhangsan'}del user
  • claer():清空字典中的元素
user = {"id": 1, "name": "zhangsan"}user.clear()print(user)  # {}

獲取字典檢視

  • keys():獲取字典中所有key
  • values():獲取字典中所有value
  • items():獲取字典中所有key,value鍵值對

字典元素的遍歷

  • 遍歷key,再通過key獲取value
scores = {'張三': 100, '李四': 95, '王五': 88}for name in scores:
    print(name, scores[name])
  • 通過items()方法,同時遍歷key,value
scores = {'張三': 100, '李四': 95, '王五': 88}for name, score in scores.items():
    print(name, score)

知識點總結

在這裡插入圖片描述

集合 set

集合的特點

  • 集合是可變序列
  • 集合是沒有value的字典
  • 集合中元素不重複
  • 集合中元素是無序的

集合的建立

  • {}
s = {'Python', 'hello', 90}
  • 內建函數set()
print(set("Python"))print(set(range(1,6)))print(set([3, 4, 7]))print(set((3, 2, 0)))print(set({"a", "b", "c"}))# 定義空集合:set()print(set())
  • 集合生成式
print({i * i for i in range(1, 10)})# {64, 1, 4, 36, 9, 16, 49, 81, 25}

集合的操作

  1. 集合元素的判斷操作
  • in / not in
  1. 集合元素的新增操作
  • add():一次添中一個元素
  • update(:)新增多個元素
  1. 集合元素的刪除操作
  • remove():刪除一個指定元素,如果指定的元素不存在丟擲KeyError
  • discard(:)刪除一個指定元素,如果指定的元素不存在不拋異常
  • pop():隨機刪除一個元素
  • clear():清空集合

集合間的關係

  1. 兩個集合是否相等:可以使用運運算元 == 或 != 進行判斷,只要元素相同就相等

  2. 一個集合是否是另一個集合的子集:issubset()

s1 = {10, 20, 30, 40, 50, 60}s2 = {10, 30, 40}s3 = {10, 70}print(s2.issubset(s1))  
# Trueprint(s3.issubset(s1))  # False
  1. 一個集合是否是另一個集合的超集:issuperset()
print(s1.issuperset(s2))  # Trueprint(s1.issuperset(s3))  # False
  1. 兩個集合是否無交集:isdisjoint()
s1 = {10, 20, 30, 40, 50, 60}s2 = {10, 30, 40}s3 = {20, 70}print(s1.isdisjoint(s2))  
# False 有交集print(s3.isdisjoint(s2))  # True  無交集

集合的數學操作

  1. 交集: intersection() 與 &等價,兩個集合的交集
s1 = {10, 20, 30, 40}s2 = {20, 30, 40, 50, 60}print(s1.intersection(s2))  # {40, 20, 30}print(s1 & s2)  # {40, 20, 30}
  1. 並集: union() 與 | 等價,兩個集合的並集
print(s1.union(s2))  # {40, 10, 50, 20, 60, 30}print(s1 | s2)  # {40, 10, 50, 20, 60, 30}
  1. 差集: difference() 與 - 等價
print(s2.difference(s1))  # {50, 60}print(s2 - s1)  # {50, 60}
  1. 對稱差集:symmetric_difference() 與 ^ 等價
print(s2.symmetric_difference(s1))  # {10, 50, 60}print(s2 ^ s1)  # {10, 50, 60}

知識點總結

在這裡插入圖片描述

列表、元組、字典、集合總結

推薦學習:

以上就是詳細介紹Python3資料結構知識點的詳細內容,更多請關注TW511.COM其它相關文章!