天天看點

五步讓你掌握Python資料結構

五步讓你掌握Python資料結構

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 步:清單、元組、字典和集合的比較

資料結構 是否有序 可變的 重複元素 用例
清單 是的 是的 是的 存儲序列
元組 是的 是的 存儲不可變序列
字典 是的

鍵:無

值:是

存儲鍵值對
集合 是的 消除重複、會員測試

何時使用每種資料結構

  • 使用清單來擷取有序的、基于序列的資料。對于堆棧/隊列很有用。
  • 使用元組來表示有序的、不可變的序列。當您需要不應更改的固定元素集合時很有用。
  • 使用字典來存儲鍵值資料。對于存儲相關屬性很有用。
  • 使用集合來存儲唯一進制素和數學運算。