Python資料結構簡介
四種基本的 Python 資料結構:
- 清單 - 有序、可變、允許重複元素。對于存儲資料序列很有用。
- 元組 - 有序、不可變、允許重複元素。将它們視為不可變的清單。
- 字典 - 無序、可變、由鍵值對映射。對于以鍵值格式存儲資料很有用。
- 集合 - 無序、可變、包含唯一進制素。對于成員資格測試和消除重複很有用。
除了基本的資料結構之外,Python 還提供了更進階的結構,例如堆、隊列和連結清單,這些可以進一步增強您的編碼能力。這些進階結建構立在基礎結構的基礎上,可以實作更複雜的資料處理,并且通常用于特殊場景。但并不受限于這裡;也可以使用所有現有結構作為基礎來實作您自己的結構。
第 1 步:在 Python 中使用清單
Python 中的清單是什麼?
Python 中的清單是一種有序的、可變的資料類型,可以存儲各種對象,并允許重複元素。清單是通過使用方括号來定義的[ ],元素之間用逗号分隔。
例如:
fibs = [0, 1, 1, 2, 3, 5, 8, 13, 21]
清單對于組織和存儲資料序列非常有用。
建立清單
清單可以包含不同的資料類型,如字元串、整數、布爾值等。例如:
mixed_list = [42, "Hello World!", False, 3.14159]
操作清單
可以通路、添加、更改和删除清單中的元素。例如:
# 通路第二個元素(索引從’0’開始)
print(mixed_list[1])
# 添加元素
mixed_list.append("This is new")
# 更改元素
mixed_list[0] = 5
# 删除第一進制素
mixed_list.pop(0)
清單方法
一些友善的内置清單方法包括:
- sort()- 就地排序清單
- append()- 将元素添加到清單末尾
- insert()- 在索引處插入元素
- pop()- 删除索引處的元素
- remove()- 删除第一次出現的值
- reverse()- 就地反轉清單
示例
# 生成清單
cart = ["apples", "oranges", "grapes"]
# Sort the list
cart.sort()
# Add new item
cart.append("blueberries")
# Remove first item
cart.pop(0)
print(cart)
輸出:
['grapes', 'oranges', 'blueberries']
第 2 步:了解 Python 中的元組
什麼是元組?
元組是 Python 中的另一種序列資料類型,類似于清單。然而,與清單不同,元組是不可變的,這意味着它們的元素一旦建立就不能更改。它們是通過将元素括在括号中來定義的( )。
# Defining a tuple
my_tuple = (1, 2, 3, 4)
何時使用元組
元組通常用于不應修改的項目的集合。元組比清單更快,這使得它們非常适合隻讀操作。一些常見的用例包括:
- 存儲常量或配置資料
- 具有多個元件的函數傳回值
- 字典鍵,因為它們是可散列的
通路元組元素
通路元組中的元素的方式與通路清單元素類似。索引和切片的工作方式相同。
# 通路元組
first_element = my_tuple[0]
sliced_tuple = my_tuple[1:3]
元組操作
由于元組是不可變的,是以許多清單操作(如append()或 )remove()不适用。但是,仍然可以執行一些操作:
- 連接配接:使用+運算符組合元組。
concatenated_tuple = my_tuple + (5, 6)
- 重複:使用運算符重複元組*。
repeated_tuple = my_tuple * 2
- 成員資格:檢查元組中是否存在帶有關鍵字的元素in。
exists = 1 in my_tuple
元組方法
鑒于元組的不可變性質,與清單相比,元組的内置方法更少。一些有用的方法包括:
- count():計算特定元素的出現次數。
count_of_ones = my_tuple.count(1)
- index():查找某個值第一次出現的索引。
index_of_first_one = my_tuple.index(1)
元組打包和解包
元組打包和解包是 Python 中友善的功能:
- 打包:将多個值配置設定給單個元組。
packed_tuple = 1, 2, 3
- 拆包:将元組元素配置設定給多個變量。
a, b, c = packed_tuple
不可變但不嚴格
雖然元組本身是不可變的,但它們可以包含可變元素,例如清單。
# 包含可變清單的元組
complex_tuple = (1, 2, [3, 4])
請注意,雖然無法更改元組本身,但可以修改其中的可變元素。
第三步:掌握 Python 字典
Python 中的字典是什麼?
Python 中的字典是一種無序、可變的資料類型,用于存儲唯一鍵到值的映射。字典用大括号編寫{ },由逗号分隔的鍵值對組成。
例如:
student = {"name": "Michael", "age": 22, "city": "Chicago"}
字典對于以結構化方式存儲資料和通過鍵通路值非常有用。
建立字典
字典鍵必須是不可變的對象,例如字元串、數字或元組。字典值可以是任何對象。
student = {"name": "Susan", "age": 23}
prices = {"milk": 4.99, "bread": 2.89}
操作字典
可以通過按鍵通路、添加、更改和删除元素。
# 根據鍵通路元素
print(student["name"])
# 增加一個新的鍵值對
student["major"] = "computer science"
# 改變一個的鍵值
student["age"] = 25
# 删除一個鍵值對
del student["city"]
字典方法
一些有用的内置方法包括:
- keys()- 傳回鍵清單
- values()- 傳回值清單
- items()- 傳回(鍵,值)元組
- get()- 傳回鍵的值,避免 KeyError
- pop()- 删除鍵并傳回值
- update()- 添加多個鍵值
示例
scores = {"Francis": 95, "John": 88, "Daniel": 82}
# 增加新成績
scores["Zoey"] = 97
# 删除John的成績
scores.pop("John")
# 通路Daniel的成績
print(scores.get("Daniel"))
# 列印所有同學的名字
print(scores.keys())
第 4 步:Python 中的集合
Python 中的集合是什麼?
Python 中的集合是唯一的、不可變對象的無序、可變的集合。集合是用大括号編寫的{ },但與字典不同,集合沒有鍵值對。
例如:
numbers = {1, 2, 3, 4}
集合對于成員資格測試、消除重複和數學運算非常有用。
建立一個集合
可以通過将清單傳遞給構造函數來從清單建立集合set():
my_list = [1, 2, 3, 3, 4]
my_set = set(my_list) # {1, 2, 3, 4}
集合可以包含混合資料類型,例如字元串、布爾值等。
操作集合
可以在集合中添加和删除元素。
numbers.add(5)
numbers.remove(1)
集合運算
一些有用的集合運算包括:
- union()- 傳回兩個集合的并集
- intersection()- 傳回集合的交集
- difference()- 傳回集合之間的差異
- symmetric_difference()- 傳回對稱內插補點
集合示例
A = {1, 2, 3, 4}
B = {2, 3, 5, 6}
# Union - 合運算
print(A | B)
# 交運算
print(A & B)
# 差運算
print(A - B)
# 對稱差運算
print(A ^ B)
第 5 步:清單、元組、字典和集合的比較
資料結構 | 是否有序 | 可變的 | 重複元素 | 用例 |
清單 | 是的 | 是的 | 是的 | 存儲序列 |
元組 | 是的 | 不 | 是的 | 存儲不可變序列 |
字典 | 不 | 是的 | 鍵:無 值:是 | 存儲鍵值對 |
集合 | 不 | 是的 | 不 | 消除重複、會員測試 |
何時使用每種資料結構
- 使用清單來擷取有序的、基于序列的資料。對于堆棧/隊列很有用。
- 使用元組來表示有序的、不可變的序列。當您需要不應更改的固定元素集合時很有用。
- 使用字典來存儲鍵值資料。對于存儲相關屬性很有用。
- 使用集合來存儲唯一進制素和數學運算。