Python 的核心數據結構是內置的基礎存儲容器,設計簡潔且功能強大,覆蓋了絕大多數編程場景的需求。它們的核心特點是 “開箱即用、高效靈活” ,主要包括 列表(List)、元組(Tuple)、字典(Dictionary)、集合(Set) ,再加上基礎的字符串(String),共同構成了 Python 數據處理的基石。

以下從 定義、核心特性、常用操作、適用場景 四個維度,詳細介紹每個核心數據結構:

一、列表(List):有序可變的“萬能容器”

1. 定義與外觀

列表是 Python 最常用的數據結構,用於存儲 有序、可修改 的元素集合,用方括號 [] 定義,元素之間用逗號分隔。

# 示例:存儲不同類型的元素(Python 列表支持異構元素)
fruits = ["蘋果", "香蕉", 100, True, 3.14]
nums = [1, 2, 3, 4, 5]

2. 核心特性

  • 有序性:元素按插入順序排列,支持通過索引(下標)訪問(索引從 0 開始);
  • 可變性:可動態添加、刪除、修改元素(不創建新列表,直接修改原容器);
  • 異構性:可存儲不同類型的元素(字符串、數字、布爾值、甚至其他列表);
  • 可重複:允許存儲重複元素。

3. 常用操作(高頻)

操作

代碼示例

功能説明

訪問元素

fruits[0]

獲取索引 0 的元素(輸出:蘋果)

切片(截取子列表)

nums[1:4]

獲取索引 1~3 的元素(輸出:[2,3,4])

添加元素(末尾)

fruits.append("橙子")

末尾添加元素(列表長度+1)

插入元素(指定位置)

fruits.insert(1, "梨")

在索引 1 處插入元素

刪除元素(按值)

fruits.remove(100)

刪除第一個匹配的值

刪除元素(按索引)

del fruits[2]

刪除索引 2 的元素

反轉列表

nums.reverse()

原地反轉列表(輸出:[5,4,3,2,1])

排序

nums.sort()

原地升序排序(默認),sort(reverse=True) 降序

統計元素出現次數

nums.count(3)

統計 3 出現的次數(輸出:1)

4. 適用場景

  • 存儲需要按順序訪問、頻繁修改的數據(如購物車商品、任務列表);
  • 臨時存儲多個異構元素(如接口返回的混合類型數據);
  • 需要動態增減元素的場景(如用户輸入的多條數據)。

二、元組(Tuple):有序不可變的“安全容器”

1. 定義與外觀

元組是 有序、不可修改 的元素集合,用圓括號 () 定義(單個元素需加逗號,避免歧義)。

# 示例:存儲固定不變的數據
coordinates = (10.0, 20.0)  # 座標(x,y)
person_info = ("小明", 25, "北京")  # 個人信息(姓名、年齡、城市)
single_tuple = (5,)  # 單個元素的元組(必須加逗號)

2. 核心特性

  • 有序性:與列表一致,支持索引訪問和切片;
  • 不可變性:創建後無法添加、刪除、修改元素(若元素是可變類型如列表,可修改元素內部值,但元組結構不變);
  • 異構性:支持存儲不同類型元素;
  • 可重複:允許重複元素;
  • 輕量高效:比列表佔用內存更少,訪問速度更快。

3. 常用操作(高頻)

操作

代碼示例

功能説明

訪問元素

person_info[0]

獲取索引 0 的元素(輸出:小明)

切片(截取子元組)

person_info[1:]

獲取索引 1 及以後的元素(輸出:(25, "北京"))

統計元素出現次數

(1,2,2,3).count(2)

統計 2 出現的次數(輸出:2)

查找元素索引

person_info.index("北京")

查找元素的第一個索引(輸出:2)

4. 適用場景

  • 存儲固定不變的數據(如座標、配置參數、常量);
  • 函數返回多個值(本質是返回元組,可解構賦值:name, age = func());
  • 作為字典的鍵(元組不可變,列表不可作為字典鍵);
  • 需要數據安全性的場景(避免誤修改核心數據)。

三、字典(Dictionary):無序鍵值對的“映射容器”

1. 定義與外觀

字典是 無序(Python 3.7+ 後保證插入順序)、鍵值對(key-value) 存儲的容器,用大括號 {} 定義,鍵(key)唯一且不可變,值(value)可任意類型。

# 示例:存儲鍵值映射關係的數據
student = {
    "id": 101,
    "name": "小紅",
    "score": 95,
    "courses": ["數學", "英語"]  # 值可以是列表等可變類型
}
empty_dict = {}  # 空字典

2. 核心特性

  • 映射性:通過唯一的 key 快速查找 value(查詢效率遠高於列表);
  • 鍵不可變:key 必須是不可變類型(字符串、數字、元組),不能是列表、字典等可變類型;
  • 值可任意:value 可以是任意類型(包括字典、列表等可變類型);
  • 鍵唯一:重複的 key 會被覆蓋(後定義的生效)。

3. 常用操作(高頻)

操作

代碼示例

功能説明

訪問值(按 key)

student["name"]

獲取 key 為 "name" 的值(輸出:小紅)

安全訪問值

student.get("gender", "未知")

無 key 時返回默認值(輸出:未知)

添加/修改鍵值對

student["gender"] = "女"

有 key 則修改,無 key 則添加

刪除鍵值對

del student["courses"]

刪除 key 為 "courses" 的鍵值對

獲取所有 key

student.keys()

返回所有 key 的視圖(輸出:dict_keys(['id','name','score','gender']))

獲取所有 value

student.values()

返回所有 value 的視圖

獲取所有鍵值對

student.items()

返回所有 (key, value) 元組(遍歷常用)

清空字典

student.clear()

清空所有鍵值對

4. 適用場景

  • 存儲具有映射關係的數據(如用户信息、配置項、接口返回的 JSON 數據);
  • 需要快速通過 key 查詢數據的場景(如根據 ID 查找用户);
  • 存儲多維度數據(如商品的名稱、價格、庫存等屬性)。

四、集合(Set):無序唯一的“去重容器”

1. 定義與外觀

集合是 無序、無重複元素 的容器,用大括號 {}set() 函數定義(空集合必須用 set(),不能用 {},否則是字典)。

# 示例:存儲唯一不重複的數據
tags = {"Python", "編程", "入門"}  # 標籤集合(自動去重)
nums = set([1, 2, 2, 3, 3, 3])    # 從列表創建集合(輸出:{1,2,3})
empty_set = set()  # 空集合

2. 核心特性

  • 唯一性:自動去除重複元素(創建時即去重);
  • 無序性:無固定順序,不支持索引訪問和切片;
  • 元素不可變:集合中的元素必須是不可變類型(字符串、數字、元組),不能是列表、字典等可變類型;
  • 支持集合運算:交集、並集、差集等(類似數學中的集合操作)。

3. 常用操作(高頻)

操作

代碼示例

功能説明

添加元素

tags.add("學習")

添加元素(已存在則不生效)

刪除元素(存在則刪)

tags.remove("編程")

刪除元素(不存在則報錯)

安全刪除元素

tags.discard("Java")

刪除元素(不存在則不報錯)

交集(共同元素)

{1,2,3} & {2,3,4}

輸出:{2,3}(等價於 set1.intersection(set2)

並集(所有元素)

`{1,2,3}

{2,3,4}`

差集(獨有元素)

{1,2,3} - {2,3,4}

輸出:{1}(等價於 set1.difference(set2)

對稱差集(互不相同)

{1,2,3} ^ {2,3,4}

輸出:{1,4}(等價於 set1.symmetric_difference(set2)

判斷子集

{2,3}.issubset({1,2,3})

判斷是否是子集(輸出:True)

4. 適用場景

  • 數據去重(如用户輸入的重複標籤、列表中的重複元素);
  • 集合運算(如查找兩個列表的共同元素、篩選獨有元素);
  • 快速判斷元素是否存在(in 操作效率遠高於列表,如 if "Python" in tags)。

五、字符串(String):有序不可變的“文本容器”

字符串雖常被視為“文本類型”,但本質是 有序、不可變的字符集合,具備數據結構的核心特性,也是 Python 核心數據結構之一。

1. 定義與外觀

用單引號 ''、雙引號 "" 或三引號 """ """(多行文本)定義。

name = "Python"
intro = '一門簡潔的編程語言'
multi_line = """第一行
第二行
第三行"""  # 多行字符串

2. 核心特性

  • 有序性:支持索引訪問和切片(類似列表、元組);
  • 不可變性:創建後無法修改單個字符(如 name[0] = "p" 會報錯);
  • 可拼接/重複:通過 + 拼接、* 重複生成新字符串。

3. 常用操作(高頻)

操作

代碼示例

功能説明

訪問字符

name[2]

獲取索引 2 的字符(輸出:t)

切片

name[1:4]

獲取索引 1~3 的字符(輸出:yth)

拼接字符串

name + " 入門"

拼接生成新字符串(輸出:Python 入門)

重複字符串

name * 2

重複 2 次(輸出:PythonPython)

查找子串

name.find("tho")

查找子串索引(輸出:2,不存在返回 -1)

替換子串

name.replace("Python", "Java")

替換子串(輸出:Java)

分割字符串

"a,b,c".split(",")

按分隔符分割(輸出:['a','b','c'])

去除首尾空格

" hello ".strip()

去除首尾空格(輸出:hello)

大小寫轉換

name.lower()/upper()

轉小寫/大寫

4. 適用場景

  • 存儲和處理文本數據(如用户輸入、文件內容、接口返回的文本);
  • 字符串格式化(如拼接用户信息、生成 SQL 語句)。

六、核心數據結構對比表(面試高頻)

數據結構

有序性

可變性

元素唯一性

核心特點

適用場景

列表(List)




萬能容器,動態增減

有序修改、異構元素存儲

元組(Tuple)




安全高效,不可修改

固定數據、函數多返回值、字典鍵

字典(Dict)

是(3.7+)

是(值可變)

鍵唯一

鍵值映射,查詢高效

映射關係數據、JSON 類數據

集合(Set)


是(元素可增刪)


自動去重,集合運算

數據去重、元素存在判斷、集合運算

字符串(Str)




文本處理,不可修改

文本存儲、字符串格式化

七、核心總結(入門+面試重點)

  1. 有序 vs 無序:列表、元組、字符串是有序(支持索引/切片);集合是無序(不支持索引);字典 3.7+ 後有序,之前無序;
  2. 可變 vs 不可變:列表、字典、集合是可變(可修改元素);元組、字符串是不可變(創建後無法修改);
  3. 查詢效率:字典、集合的查詢效率(in 操作)是 O(1)(哈希表實現),遠高於列表、元組的 O(n);
  4. 選型原則
  • 需有序修改 → 列表;
  • 需有序不可修改 → 元組;
  • 需鍵值映射 → 字典;
  • 需去重/集合運算 → 集合;
  • 需處理文本 → 字符串。

掌握這 5 種核心數據結構,就能應對 Python 80% 以上的開發場景,也是面試中高頻考察的基礎知識點。