Python中內(nèi)置的數(shù)據(jù)結(jié)構(gòu)類型詳解(內(nèi)置數(shù)據(jù)容器)
1. 元組(Tuple)??
元組是一種??不可變??的有序序列,用于存儲固定數(shù)據(jù)。適用于需要數(shù)據(jù)保護(hù)或哈希的場景(如字典的鍵)。
# 1、創(chuàng)建元組
# 可以使用圓括號 () 或者內(nèi)置的 tuple() 函數(shù)來創(chuàng)建元組
empty_tuple = () # 空元組
single_element = (1,) # 單元素元組(需逗號)
multi_elements = (1, "a", 3.14)
# 使用 tuple() 函數(shù)創(chuàng)建元組
from_list = tuple([4, 5, 6]) # 從列表創(chuàng)建元組
from_string = tuple('abc') # 從字符串創(chuàng)建元組 ,輸出('a', 'b', 'c')
# 2、雙向訪問與切片
# 元組支持切片操作,用于獲取元組的子集
# 切片操作使用 [start:stop:step] 的語法
print(multi_elements[0]) # 輸出: 1
print(multi_elements[-1]) # 輸出: 3.14
print(multi_elements[1:3]) # 輸出: ('a', 3.14)
print(multi_elements[0::2]) # 輸出:(1, 3.14)
# 3、不可變性示例
try:
multi_elements[0] = 10
except TypeError as e:
print(f"錯誤: {e}") # 輸出: 元組不可修改
# 4、常用方法
# 元組只有兩個內(nèi)置方法:count() 和 index()
# count():用于返回指定元素在元組中出現(xiàn)的次數(shù)
# index():用于返回指定元素在元組中第一次出現(xiàn)的索引,如果元素不存在則引發(fā) ValueError
count = multi_elements.count(1) # 統(tǒng)計元素在元組中出現(xiàn)次數(shù)
index = multi_elements.index("a") # 查找元素索引
print(count, index) # 輸出: 1 1
# 5、元組的解包
# 可以將元組中的元素解包到多個變量中
my_tuple = (10, 20, 30)
a, b, c = my_tuple
print(a) # 輸出10
print(b) # 輸出20
print(c) # 輸出30
# 6、元組作為函數(shù)返回值
# 函數(shù)可以返回一個元組,方便同時返回多個值
def get_name_and_age():
return 'Alice', 25
name, age = get_name_and_age()
print(name)
print(age)
# 7、元組的遍歷
my_tuple = (1, 2, 3, 4, 5)
for element in my_tuple:
print(element)2. 列表(List)?
列表是??可變??的有序集合,支持動態(tài)增刪改,適合存儲動態(tài)數(shù)據(jù)。與元組不同,列表的元素可以被修改、添加或刪除。
# 1、創(chuàng)建列表
my_list = [1, "a", 3.14]
from_range = list(range(3)) # [0, 1, 2]
# 2、訪問與切片
my_list = [10, 20, 30, 40, 50]
first_element = my_list[0] # 訪問第一個元素
last_element = my_list[-1] #訪問最后一個元素
subset = my_list[1:3] # 獲取從索引 1 到索引 3(不包含)的元素
every_second = my_list[0::2] # 獲取從索引 0 到末尾,步長為 2 的元素
# 3、增刪改操作
# 可以使用 append()、extend() 和 insert() 方法來添加元素
# 可以使用 remove()、pop() 和 del 語句來刪除元素
my_list = [10, 10, 20, 30, 40, 50]
my_list.append(4) # 末尾添加
my_list.extend([5, 6]) # 擴(kuò)展列表,將另一個可迭代對象的元素添加到列表末尾
my_list.insert(1, 15) # 在指定索引位置插入一個元素
my_list[1] = 20 # 修改元素
my_list.remove(20) # 刪除指定值的第一個匹配項
popped_element = my_list.pop(1) # 刪除指定索引位置的元素,并返回該元素
del my_list[0] # 刪除索引0的元素
print(my_list) # [20, 30, 40, 50, 4, 5, 6]
# 4、切片與遍歷
my_list = [10, 10, 20, 30, 40, 50]
print(my_list[::2]) # 輸出: [10, 20, 40]
for idx, val in enumerate(my_list):
print(f"索引{idx}: {val}")
# 5、常用方法
# 列表還有 count()、index()、sort()、reverse() 等方法
my_list = [1, 2, 2, 3, 2]
count_2 = my_list.count(2) # 統(tǒng)計元素 2 出現(xiàn)的次數(shù)
index_3 = my_list.index(3) # 查找元素 3 第一次出現(xiàn)的索引
my_list.sort() # 對列表進(jìn)行排序
my_list.reverse() # 反轉(zhuǎn)列表
print(count_2) # 3
print(index_3) # 3
print(my_list) # [3, 2, 2, 2, 1]
# 6、列表的遍歷
my_list = [1, 2, 3, 4, 5]
for element in my_list:
print(element)
# 7、列表推導(dǎo)式
# 創(chuàng)建一個包含 1 到 5 的平方的列表
# 列表推導(dǎo)式是一種簡潔的創(chuàng)建列表的方式
squares = [i ** 2 for i in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]3. 字典(Dict)
字典(dict)是一種無序、可變且以鍵值對形式存儲數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。字典是??鍵值對??的無序集合(Python 3.7+ 有序),支持快速查詢。
# 1、創(chuàng)建字典
# 可以使用花括號 {} 或者內(nèi)置的 dict() 函數(shù)來創(chuàng)建字典
empty_dict = {} # 空字典
simple_dict = {'name': 'Alice', 'age': 25} # 包含鍵值對的字典
from_tuples = dict([('city', 'New York'), ('country', 'USA')])
from_kwargs = dict(name='Bob', age=30)
# 2、訪問字典元素
# 可以通過鍵來訪問字典中的值。如果鍵不存在,直接訪問會引發(fā) KeyError
# 解決辦法在下段落,此處先不談
my_dict = {'name': 'Alice', 'age': 25}
name = my_dict['name'] # 通過鍵訪問值
city = my_dict.get('city') # 使用 get() 方法訪問值,如果鍵不存在,返回默認(rèn)值(這里是 None)
# 3、增刪查改
my_dict = {'name': 'Alice', 'age': 25}
my_dict['age'] = 26 # 修改已有鍵的值
my_dict['city'] = 'New York' # 添加新的鍵值對
print(my_dict) # {'name': 'Alice', 'age': 26, 'city': 'New York'}
del my_dict['city'] # 使用 del 語句刪除指定鍵的鍵值對
age = my_dict.pop('age') # 使用 pop() 方法刪除指定鍵的鍵值對,并返回該鍵對應(yīng)的值
print(my_dict) # {'name': 'Alice'}
# 4、遍歷鍵值
for key, value in person.items():
print(f"{key}: {value}")
# 5、常用方法
# keys():返回一個包含字典所有鍵的視圖對象。
# values():返回一個包含字典所有值的視圖對象。
# items():返回一個包含字典所有鍵值對的視圖對象。
# update():將另一個字典的鍵值對更新到當(dāng)前字典中
my_dict = {'name': 'Alice', 'age': 25}
keys = my_dict.keys() # 獲取所有鍵
values = my_dict.values() # 獲取所有值
items = my_dict.items() # 獲取所有鍵值對
new_dict = {'city': 'Bei Jing'} # 更新字典
my_dict.update(new_dict)
print(keys) # dict_keys(['name', 'age', 'city'])
print(values) # dict_values(['Alice', 25, 'Bei Jing'])
print(list(values)) # ['Alice', 25, 'Bei Jing']
print(items) # dict_items([('name', 'Alice'), ('age', 25), ('city', 'Bei Jing')])
print(my_dict) # {'name': 'Alice', 'age': 25, 'city': 'Bei Jing'}
# 6、字典推導(dǎo)式
# 創(chuàng)建一個包含 1 到 5 的平方的字典
squares_dict = {i: i ** 2 for i in range(1, 6)}
print(squares_dict) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}在 Python 中,字典(dict)是一種非常常用的數(shù)據(jù)結(jié)構(gòu),用于存儲鍵值對。當(dāng)嘗試訪問一個不存在的鍵時,直接使用 dict[key] 會導(dǎo)致 KeyError。為了避免這種情況,可以使用以下幾種方法:
使用 get() 方法
get() 方法是字典的一個內(nèi)置方法,它允許你安全地訪問字典中的值。如果鍵不存在,get() 方法會返回一個默認(rèn)值(通常是 None),而不是拋出錯誤。
my_dict = {"a": 1, "b": 2}
# 使用 get() 方法訪問鍵
value = my_dict.get("a") # 返回 1
print(value)
# 如果鍵不存在,返回默認(rèn)值 None
value = my_dict.get("c") # 返回 None
print(value)
# 也可以指定默認(rèn)值
value = my_dict.get("c", "默認(rèn)值") # 返回 "默認(rèn)值"
print(value)使用 defaultdict
defaultdict 是 collections 模塊中的一個類,它繼承自普通的字典,但允許你指定一個默認(rèn)值。當(dāng)你訪問一個不存在的鍵時,defaultdict 會自動創(chuàng)建一個默認(rèn)值,并將其與該鍵關(guān)聯(lián)起來。
my_dict = {"a": 1, "b": 2}
# 使用 get() 方法訪問鍵
value = my_dict.get("a") # 返回 1
print(value)
# 如果鍵不存在,返回默認(rèn)值 None
value = my_dict.get("c") # 返回 None
print(value)
# 也可以指定默認(rèn)值
value = my_dict.get("c", "默認(rèn)值") # 返回 "默認(rèn)值"
print(value)使用 setdefault() 方法
setdefault() 方法也是字典的一個內(nèi)置方法,它類似于 get(),但會在鍵不存在時插入一個默認(rèn)值。
my_dict = {"a": 1, "b": 2}
# 使用 setdefault() 方法訪問鍵
value = my_dict.setdefault("a", "默認(rèn)值") # 返回 1
print(value)
# 如果鍵不存在,插入默認(rèn)值
value = my_dict.setdefault("c", "默認(rèn)值") # 返回 "默認(rèn)值"
print(value)
print(my_dict) # 輸出:{'a': 1, 'b': 2, 'c': '默認(rèn)值'}4. 集合(Set)??
集合(set)是一種無序且唯一的數(shù)據(jù)結(jié)構(gòu),它不允許有重復(fù)的元素,常用于去重、成員檢測和集合運(yùn)算(如并集、交集、差集等)。
# 1、創(chuàng)建集合
str = set() # set() 是創(chuàng)建空集合的唯一方式,str = {}是空字典
my_set = {1, 2, 2, 3} # 自動去重 → {1, 2, 3}
from_list = set([3, 4, 5])
fruits = {'apple', 'banana', 'cherry'}
# 2、訪問集合元素
# 由于集合是無序的,不能通過索引來訪問元素。但可以使用 for 循環(huán)遍歷集合中的元素,或者使用 in 關(guān)鍵字檢查元素是否存在于集合中
```python
fruits = {'apple', 'banana', 'cherry'}
# 遍歷集合
for fruit in fruits:
print(fruit)
# 檢查元素是否存在
is_apple_in = 'apple' in fruits
print(is_apple_in) # True
# 3、添加元素
# 可以使用 add() 方法向集合中添加單個元素,使用 update() 方法添加多個元素(可以是列表、元組、集合等可迭代對象)
fruits = {'apple', 'banana'}
# 添加單個元素
fruits.add('cherry')
# 添加多個元素
fruits.update(['date', 'elderberry'])
print(fruits) # {'apple', 'banana', 'cherry', 'elderberry', 'date'}
# 4、刪除元素
# 可以使用 remove()、discard() 和 pop() 方法來刪除集合中的元素
# remove():如果元素存在,將其從集合中移除;若元素不存在,會引發(fā) KeyError
# discard():如果元素存在,將其從集合中移除;若元素不存在,不會引發(fā)錯誤
# pop():隨機(jī)移除并返回集合中的一個元素,若集合為空,會引發(fā) KeyError
fruits = {'apple', 'banana', 'cherry'}
# 使用 remove() 方法刪除元素
fruits.remove('apple')
# 使用 discard() 方法刪除元素
fruits.discard('banana')
# 使用 pop() 方法刪除元素
popped_fruit = fruits.pop()
# 5、集合的常用操作
## 5.1并集:可以使用 | 運(yùn)算符或 union() 方法實(shí)現(xiàn)
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# 使用 | 運(yùn)算符求并集
union_set1 = set1 | set2
# 使用 union() 方法求并集
union_set2 = set1.union(set2)
print(union_set1) # {1, 2, 3, 4, 5}
print(union_set2) # {1, 2, 3, 4, 5}
## 5.2交集:可以使用 & 運(yùn)算符或 intersection() 方法實(shí)現(xiàn)
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# 使用 & 運(yùn)算符求交集
intersection_set1 = set1 & set2
# 使用 intersection() 方法求交集
intersection_set2 = set1.intersection(set2)
print(intersection_set1) # {3}
print(intersection_set2) # {3}
## 5.3差集:可以使用 - 運(yùn)算符或 difference() 方法實(shí)現(xiàn)
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# 使用 - 運(yùn)算符求差集
difference_set1 = set1 - set2
# 使用 difference() 方法求差集
difference_set2 = set1.difference(set2)
print(difference_set1) # {1, 2}
print(difference_set2) # {1, 2}
## 5.4對稱差集:可以使用 ^ 運(yùn)算符或 symmetric_difference() 方法實(shí)現(xiàn)
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# 使用 ^ 運(yùn)算符求對稱差集
symmetric_difference_set1 = set1 ^ set2
# 使用 symmetric_difference() 方法求對稱差集
symmetric_difference_set2 = set1.symmetric_difference(set2)
print(symmetric_difference_set1) # {1, 2, 4, 5}
print(symmetric_difference_set2) # {1, 2, 4, 5}
# 6、集合的長度
# 可以使用 len() 函數(shù)獲取集合中元素的數(shù)量
fruits = {'apple', 'banana', 'cherry'}
length = len(fruits)
print(length) # 3
# 7、清空集合
# 可以使用 clear() 方法清空集合中的所有元素
fruits = {'apple', 'banana', 'cherry'}
fruits.clear()
print(fruits) # set()5. 字符串(Str)
字符串是??不可變??的字符序列,支持文本處理和格式化。
# 創(chuàng)建字符串
s = "Hello, 世界!"
multiline = """多行
字符串"""
# 切片與操作
print(s[0:5]) # 輸出: Hello
print(s.upper()) # 轉(zhuǎn)為大寫
# 常用方法
words = s.split(",") # 分割 → ['Hello', ' 世界!']
joined = '-'.join(words) # 合并 → "Hello-世界!"
# 格式化
name = "Alice"
print(f"Name: {name}") # 輸出: Name: Alice 6. 隊列(Queue)與棧(Stack)?
??隊列(FIFO)??:用 deque 實(shí)現(xiàn)。
??棧(LIFO)??:用列表的 append 和 pop 實(shí)現(xiàn)。
隊列(Queue)和棧(Stack)是兩種常見的數(shù)據(jù)結(jié)構(gòu),它們在數(shù)據(jù)存儲和訪問方式上有很大的區(qū)別。以下是它們的主要區(qū)別:
6.1. 數(shù)據(jù)訪問方式
6.1.1 隊列(Queue)
特點(diǎn):先進(jìn)先出(FIFO,F(xiàn)irst In First Out)。最早進(jìn)入隊列的元素會最先被移除。
操作:
入隊(Enqueue):在隊列的尾部添加一個元素。
出隊(Dequeue):從隊列的頭部移除一個元素。
查看隊首元素(Peek):查看隊列頭部的元素,但不移除它。

6.1.2 棧(Stack)
特點(diǎn):后進(jìn)先出(LIFO,Last In First Out)。最后進(jìn)入棧的元素會最先被移除。
操作:
入棧(Push):在棧的頂部添加一個元素。
出棧(Pop):從棧的頂部移除一個元素。
查看棧頂元素(Peek):查看棧頂?shù)脑?,但不移除它?/p>

# 隊列示例 from collections import deque queue = deque([1, 2, 3]) queue.append(4) # 入隊 print(queue.popleft()) # 出隊 → 1 # 棧示例 stack = [] stack.append(10) # 入棧 print(stack.pop()) # 出棧 → 10
6.2. 應(yīng)用場景
隊列(Queue)
任務(wù)調(diào)度:操作系統(tǒng)中的任務(wù)調(diào)度,按照任務(wù)到達(dá)的順序執(zhí)行。
消息隊列:在多線程或多進(jìn)程環(huán)境中,用于傳遞消息。
打印隊列:打印機(jī)按照任務(wù)提交的順序打印文檔。
廣度優(yōu)先搜索(BFS):在圖的遍歷中,隊列用于存儲待訪問的節(jié)點(diǎn)。
棧(Stack)
函數(shù)調(diào)用:程序運(yùn)行時,函數(shù)調(diào)用的上下文(如局部變量、返回地址等)存儲在棧中。
表達(dá)式求值:計算算術(shù)表達(dá)式的值,如逆波蘭表達(dá)式。
括號匹配:檢查括號是否正確匹配。
深度優(yōu)先搜索(DFS):在圖的遍歷中,棧用于存儲待訪問的節(jié)點(diǎn)。
撤銷操作(Undo):在軟件中實(shí)現(xiàn)撤銷功能,如文本編輯器中的撤銷操作。
6.3. 實(shí)現(xiàn)方式
隊列(Queue)
Python 實(shí)現(xiàn):可以使用 collections.deque,它是一個雙端隊列,支持高效的頭部和尾部操作。
from collections import deque queue = deque() queue.append(1) # 入隊 queue.append(2) queue.append(3) print(queue.popleft()) # 出隊,輸出 1
棧(Stack)
Python 實(shí)現(xiàn):可以使用普通的列表(list),利用 append() 和 pop() 方法來模擬棧的操作。
stack = [] stack.append(1) # 入棧 stack.append(2) stack.append(3) print(stack.pop()) # 出棧,輸出 3
6.4. 內(nèi)存結(jié)構(gòu)
隊列(Queue)
隊列的元素順序是固定的,新元素總是添加到尾部,舊元素總是從頭部移除。隊列的頭部和尾部可以動態(tài)變化。
隊列通常需要維護(hù)兩個指針(頭部指針和尾部指針)來跟蹤元素的位置。
棧(Stack)
棧的元素順序是動態(tài)的,新元素總是添加到頂部,舊元素也總是從頂部移除。棧的頂部位置會不斷變化。
棧通常只需要維護(hù)**一個指針(棧頂指針)**來跟蹤元素的位置。
6.5. 性能
隊列(Queue)
使用 collections.deque 時,隊列的頭部和尾部操作(入隊、出隊)的時間復(fù)雜度為 O(1)。
棧(Stack)
使用列表(list)時,棧的入棧和出棧操作的時間復(fù)雜度為 O(1)。
總結(jié):數(shù)據(jù)結(jié)構(gòu)對比表

- Python 中的Schema數(shù)據(jù)結(jié)構(gòu)及類型校驗(yàn)詳解
- Python基礎(chǔ)知識+結(jié)構(gòu)+數(shù)據(jù)類型
- python數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)類型
- Python基本數(shù)據(jù)結(jié)構(gòu)之字典類型dict用法分析
- Python學(xué)習(xí)筆記基本數(shù)據(jù)結(jié)構(gòu)之序列類型list tuple range用法分析
- 使用Python向C語言的鏈接庫傳遞數(shù)組、結(jié)構(gòu)體、指針類型的數(shù)據(jù)
- Python入門_淺談數(shù)據(jù)結(jié)構(gòu)的4種基本類型
相關(guān)文章
python版本坑:md5例子(python2與python3中md5區(qū)別)
這篇文章主要介紹了python版本坑:md5例子(python2與python3中md5區(qū)別),需要的朋友可以參考下2017-06-06
Python基礎(chǔ)之循環(huán)語句相關(guān)知識總結(jié)
今天給大家?guī)淼氖顷P(guān)于Python基礎(chǔ)的相關(guān)知識,文章圍繞著Python循環(huán)語句展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
火遍網(wǎng)絡(luò)的python中秋節(jié)賀卡現(xiàn)在學(xué)還趕得上
中秋將至,我用python編寫了個火遍網(wǎng)絡(luò)的中秋節(jié)賀卡,現(xiàn)在學(xué)起來還不晚,文中給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
教你怎么用Python實(shí)現(xiàn)GIF動圖的提取及合成
今天教大家一個Python有趣好玩的小功能:將多張圖片轉(zhuǎn)為GIF,同時也可以將一個GIF動圖提取出里面的圖片,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Python使用Socket實(shí)現(xiàn)簡單聊天程序
這篇文章主要介紹了Python使用Socket實(shí)現(xiàn)簡單聊天程序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02
python實(shí)現(xiàn)修改固定模式的字符串內(nèi)容操作示例
這篇文章主要介紹了python實(shí)現(xiàn)修改固定模式的字符串內(nèi)容操作,結(jié)合實(shí)例形式詳細(xì)分析了Python修改固定模式字符串原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-12-12
python自動定時任務(wù)schedule庫的使用方法
當(dāng)你需要在 Python 中定期執(zhí)行任務(wù)時,schedule 庫是一個非常實(shí)用的工具,它可以幫助你自動化定時任務(wù),本文給大家介紹了python自動定時任務(wù)schedule庫的使用方法,需要的朋友可以參考下2024-02-02

