最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python列表、集合、字典核心區(qū)別舉例詳解

 更新時間:2026年01月22日 09:27:39   作者:他們叫我技術(shù)總監(jiān)  
在Python中,列表(list)、元組(tuple)、字典(dictionary)和集合(set)是四種常用的數(shù)據(jù)結(jié)構(gòu),它們各自有不同的特點(diǎn)和用途,這篇文章主要介紹了Python列表、集合、字典核心區(qū)別的相關(guān)資料,需要的朋友可以參考下

Python 列表、集合、字典核心區(qū)別:從班級分?jǐn)?shù)統(tǒng)計(jì)案例徹底講透

在Python編程學(xué)習(xí)中,列表(list)、集合(set)、字典(dict)是最常用的三大核心數(shù)據(jù)結(jié)構(gòu)。很多新手初期極易混淆三者的語法和使用場景——比如同樣用大括號包裹的集合和字典、看似都能存數(shù)據(jù)的列表和集合,到底該在什么場景下用什么結(jié)構(gòu)?

本文將以「班級分?jǐn)?shù)統(tǒng)計(jì)」這一貼近實(shí)際的案例為核心,從語法特性、使用場景、核心差異三個維度,徹底講清列表、集合、字典的區(qū)別,幫你建立清晰的Python數(shù)據(jù)結(jié)構(gòu)認(rèn)知。

一、案例背景:班級分?jǐn)?shù)統(tǒng)計(jì)的核心需求

先看一個典型的實(shí)際場景:

某班級某次考試的分?jǐn)?shù)列表為 [80,40,60,70,90,90,12,50,80],我們需要完成以下統(tǒng)計(jì)需求:

  1. 找出所有不重復(fù)的分?jǐn)?shù)(去重);
  2. 統(tǒng)計(jì)每個分?jǐn)?shù)對應(yīng)的出現(xiàn)人數(shù);
  3. 清晰展示分?jǐn)?shù)與人數(shù)的對應(yīng)關(guān)系。

這個需求恰好能完美體現(xiàn)列表、集合、字典的分工與差異,我們先看完整實(shí)現(xiàn)代碼,再拆解分析:

# 1. 原始分?jǐn)?shù)數(shù)據(jù):用列表存儲(允許重復(fù)、有序、可修改)
score = [80,40,60,70,90,90,12,50,80]
print("原始分?jǐn)?shù)列表:", score)

# 2. 分?jǐn)?shù)去重:用集合特性(自動去重、無序、元素唯一)
score_set = set(score)
print("\n去重后的分?jǐn)?shù)集合:", score_set)

# 3. 統(tǒng)計(jì)每個分?jǐn)?shù)出現(xiàn)次數(shù):用字典存儲(鍵值對映射關(guān)系)
score_count = {}  # 空大括號默認(rèn)是字典,而非集合
# 遍歷去重后的分?jǐn)?shù)集合,統(tǒng)計(jì)每個分?jǐn)?shù)在原列表中的出現(xiàn)次數(shù)
for s in score_set:
    score_count[s] = score.count(s)

# 4. 輸出統(tǒng)計(jì)結(jié)果
print("\n分?jǐn)?shù)統(tǒng)計(jì)結(jié)果:")
for score_value, count in score_count.items():
    print(f"成績?yōu)閧score_value}分的有{count}人")

# 5. 完整字典展示
print("\n統(tǒng)計(jì)結(jié)果字典:", score_count)

運(yùn)行結(jié)果:

原始分?jǐn)?shù)列表: [80, 40, 60, 70, 90, 90, 12, 50, 80]

去重后的分?jǐn)?shù)集合: {70, 80, 12, 40, 50, 60, 90}

分?jǐn)?shù)統(tǒng)計(jì)結(jié)果:
成績?yōu)?0分的有1人
成績?yōu)?0分的有2人
成績?yōu)?2分的有1人
成績?yōu)?0分的有1人
成績?yōu)?0分的有1人
成績?yōu)?0分的有1人
成績?yōu)?0分的有2人

統(tǒng)計(jì)結(jié)果字典: {70: 1, 80: 2, 12: 1, 40: 1, 50: 1, 60: 1, 90: 2}

二、核心拆解:列表、集合、字典在案例中的分工

2.1 列表(list):存儲原始數(shù)據(jù)的“基礎(chǔ)容器”

在案例中,score = [80,40,60,70,90,90,12,50,80] 是典型的列表應(yīng)用,我們先明確列表的核心特性:

(1)語法與定義

  • 標(biāo)識:用 [] 包裹元素,元素間用逗號分隔;
  • 空列表定義:empty_list = []
  • 核心特點(diǎn):有序、可變、允許重復(fù)元素。

(2)在案例中的作用

列表是存儲原始分?jǐn)?shù)的最佳選擇,原因如下:

  • 考試分?jǐn)?shù)天然是“有序”的(按學(xué)生順序記錄),列表的有序性可以保留原始記錄順序;
  • 分?jǐn)?shù)存在重復(fù)(如80、90各出現(xiàn)2次),列表允許重復(fù)元素的特性完全匹配;
  • 后續(xù)若需要修改分?jǐn)?shù)(如訂正錄錯的分?jǐn)?shù)),列表的“可變”特性支持增刪改操作(如 score[2] = 65 可修改第三個分?jǐn)?shù))。

(3)列表的常用操作(補(bǔ)充)

# 列表新增元素
score.append(85)  # 末尾添加85
print("添加元素后:", score)  # [80,40,60,70,90,90,12,50,80,85]

# 列表刪除元素
score.remove(90)  # 刪除第一個90
print("刪除元素后:", score)  # [80,40,60,70,90,12,50,80,85]

# 列表索引取值
print("第三個分?jǐn)?shù):", score[2])  # 60(索引從0開始)

2.2 集合(set):去重的“高效工具”

在案例中,score_set = set(score) 將列表轉(zhuǎn)為集合實(shí)現(xiàn)去重,這是集合最核心的應(yīng)用場景,我們拆解集合的特性:

(1)語法與定義

  • 標(biāo)識:非空集合用 {} 包裹(無鍵值對),空集合必須用 set()(而非 {});
  • 空集合定義:empty_set = set()(重點(diǎn):{} 是空字典,不是空集合);
  • 核心特點(diǎn):無序、可變、元素唯一(自動去重)。

(2)在案例中的作用

集合的核心價值是“去重”,具體體現(xiàn)在:

  • 原始分?jǐn)?shù)列表有重復(fù)值(80、90),轉(zhuǎn)為集合后自動剔除重復(fù),只保留唯一分?jǐn)?shù);
  • 遍歷集合時,每個分?jǐn)?shù)只處理一次,避免重復(fù)統(tǒng)計(jì)(若直接遍歷列表,會重復(fù)統(tǒng)計(jì)80、90)。

(3)集合的其他常用操作(補(bǔ)充)

集合的核心優(yōu)勢除了去重,還有高效的集合運(yùn)算(交集、并集、差集),比如我們新增一個“及格分?jǐn)?shù)集合”,可以快速篩選出及格/不及格分?jǐn)?shù):

# 定義及格分?jǐn)?shù)集合(60分及以上)
pass_score = {60,70,80,90}
# 交集:找出既在score_set中又在pass_score中的分?jǐn)?shù)(及格分?jǐn)?shù))
print("及格分?jǐn)?shù):", score_set & pass_score)  # {70,80,60,90}
# 差集:找出score_set中有但pass_score中沒有的分?jǐn)?shù)(不及格分?jǐn)?shù))
print("不及格分?jǐn)?shù):", score_set - pass_score)  # {12,40,50}
# 并集:合并兩個集合(無重復(fù))
print("所有分?jǐn)?shù)合并:", score_set | pass_score)  # {70,80,12,40,50,60,90}

2.3 字典(dict):存儲映射關(guān)系的“通訊錄”

在案例中,score_count = {} 定義空字典,最終存儲 {分?jǐn)?shù): 人數(shù)} 的映射關(guān)系,這是字典的核心應(yīng)用場景:

(1)語法與定義

  • 標(biāo)識:用 {key: value} 包裹,鍵(key)和值(value)用冒號分隔,鍵值對間用逗號分隔;
  • 空字典定義:empty_dict = {}(重點(diǎn):這是Python默認(rèn)的空字典定義方式);
  • 核心特點(diǎn):鍵值對映射、鍵唯一(重復(fù)鍵會覆蓋)、值可重復(fù)、3.7+版本有序。

(2)在案例中的作用

字典的核心價值是“鍵值對映射”,具體體現(xiàn)在:

  • 鍵(key):唯一的分?jǐn)?shù)值(如80、90),保證每個分?jǐn)?shù)只對應(yīng)一個統(tǒng)計(jì)結(jié)果;
  • 值(value):該分?jǐn)?shù)的出現(xiàn)次數(shù)(如80對應(yīng)2,90對應(yīng)2),存儲統(tǒng)計(jì)結(jié)果;
  • 遍歷字典時,通過 items() 方法可以同時獲取鍵(分?jǐn)?shù))和值(人數(shù)),方便輸出統(tǒng)計(jì)結(jié)果。

(3)字典的常用操作(補(bǔ)充)

# 新增鍵值對:添加分?jǐn)?shù)85的統(tǒng)計(jì)(假設(shè)85出現(xiàn)1次)
score_count[85] = 1
print("新增后字典:", score_count)  # {70:1,80:2,...85:1}

# 修改值:修正80分的統(tǒng)計(jì)次數(shù)(假設(shè)實(shí)際是3人)
score_count[80] = 3
print("修改后字典:", score_count)  # {70:1,80:3,...}

# 按鍵取值
print("80分的人數(shù):", score_count[80])  # 3

# 刪除鍵值對
del score_count[85]
print("刪除后字典:", score_count)  # 移除85對應(yīng)的鍵值對

三、列表、集合、字典核心對比表

為了讓你更直觀地記住三者的區(qū)別,我們整理了詳細(xì)的對比表,涵蓋語法、特性、使用場景等核心維度:

維度列表(list)集合(set)字典(dict)
語法標(biāo)識[]非空:{元素},空:set(){key: value},空:{}
核心結(jié)構(gòu)單一元素序列單一元素集合(無映射)鍵值對(key: value)映射
有序性有序(索引固定)無序(無索引)3.7+有序,3.7以下無序
重復(fù)性允許重復(fù)元素元素唯一(自動去重)鍵唯一(重復(fù)鍵覆蓋),值可重復(fù)
可變性可變(增刪改元素)可變(增刪元素)可變(增刪改鍵值對)
索引方式數(shù)字索引(如 list[0]無索引(無法通過下標(biāo)取值)鍵索引(如 dict['key']
核心優(yōu)勢保留順序、支持重復(fù)、通用高效去重、集合運(yùn)算鍵值映射、快速查找
典型場景存儲原始有序數(shù)據(jù)(如分?jǐn)?shù)列表)去重、篩選(如及格分?jǐn)?shù)篩選)統(tǒng)計(jì)映射(如分?jǐn)?shù)-人數(shù)統(tǒng)計(jì))
常用方法append()、remove()、count()add()、update()、&//-

四、避坑指南:新手最易混淆的3個點(diǎn)

4.1 空大括號{}是字典,不是集合

這是最容易踩的坑!Python語法規(guī)定:

  • d = {} → 空字典(dict);
  • s = set() → 空集合(set);
  • 錯誤寫法:s = {}(誤以為是集合,實(shí)際是字典)。

驗(yàn)證代碼:

d = {}
s = set()
print(type(d))  # <class 'dict'>
print(type(s))  # <class 'set'>

4.2 集合不能存儲可變元素

集合的元素必須是“不可哈希”的(如數(shù)字、字符串、元組),不能存儲列表、字典等可變元素,否則會報錯:

# 錯誤:集合中不能放列表
# s = {[1,2], 80}  # TypeError: unhashable type: 'list'

# 正確:集合中放元組(不可變)
s = {(1,2), 80}
print(s)  # {80, (1, 2)}

4.3 字典的鍵必須是不可變的

字典的鍵(key)和集合元素要求一致,必須是不可變類型,值(value)可以是任意類型:

# 錯誤:鍵不能是列表
# d = {[1,2]: 80}  # TypeError: unhashable type: 'list'

# 正確:鍵是字符串/數(shù)字,值是列表
d = {"score_list": [80,90], 80: [1,2,3]}
print(d)  # {'score_list': [80, 90], 80: [1, 2, 3]}

五、實(shí)戰(zhàn)總結(jié):如何選擇合適的數(shù)據(jù)結(jié)構(gòu)?

回到班級分?jǐn)?shù)統(tǒng)計(jì)的案例,我們可以總結(jié)出一套“數(shù)據(jù)結(jié)構(gòu)選擇口訣”,幫你快速決策:

  1. 需要保留順序、允許重復(fù)、頻繁修改 → 用列表(如存儲原始分?jǐn)?shù));
  2. 需要去重、集合運(yùn)算(交集/并集) → 用集合(如分?jǐn)?shù)去重、篩選及格分?jǐn)?shù));
  3. 需要鍵值映射、按“關(guān)鍵字”查找 → 用字典(如分?jǐn)?shù)-人數(shù)統(tǒng)計(jì)、學(xué)生姓名-分?jǐn)?shù)映射)。

再舉幾個實(shí)際開發(fā)中的例子,幫你鞏固:

  • 存儲用戶輸入的多個關(guān)鍵詞 → 列表(keywords = ["Python", "數(shù)據(jù)結(jié)構(gòu)", "案例"]);
  • 篩選兩個關(guān)鍵詞列表的共同關(guān)鍵詞 → 集合(set1 & set2);
  • 存儲用戶信息(姓名、年齡、手機(jī)號)→ 字典(user = {"name": "張三", "age": 20, "phone": "13800138000"})。

六、完整案例代碼(可直接運(yùn)行)

為了方便你復(fù)制使用,這里給出包含所有功能的完整代碼:

# ==================================
# 班級分?jǐn)?shù)統(tǒng)計(jì):列表+集合+字典綜合案例
# ==================================

# 1. 定義原始分?jǐn)?shù)列表(有序、可重復(fù)、可變)
score = [80,40,60,70,90,90,12,50,80]
print("=== 原始數(shù)據(jù) ===")
print("原始分?jǐn)?shù)列表:", score)
print("列表長度(總?cè)藬?shù)):", len(score))

# 2. 列表轉(zhuǎn)集合實(shí)現(xiàn)去重(無序、唯一、可變)
score_set = set(score)
print("\n=== 去重處理 ===")
print("去重后的分?jǐn)?shù)集合:", score_set)
print("去重后分?jǐn)?shù)數(shù)量:", len(score_set))

# 3. 集合運(yùn)算:篩選及格/不及格分?jǐn)?shù)
pass_score = {60,70,80,90}
print("\n=== 集合運(yùn)算(及格篩選) ===")
print("及格分?jǐn)?shù)(交集):", score_set & pass_score)
print("不及格分?jǐn)?shù)(差集):", score_set - pass_score)

# 4. 字典統(tǒng)計(jì)分?jǐn)?shù)出現(xiàn)次數(shù)(鍵值對、鍵唯一)
score_count = {}
for s in score_set:
    score_count[s] = score.count(s)

# 5. 輸出統(tǒng)計(jì)結(jié)果
print("\n=== 分?jǐn)?shù)統(tǒng)計(jì)結(jié)果 ===")
# 按分?jǐn)?shù)升序排序輸出(字典3.7+有序,排序更直觀)
for score_value in sorted(score_count.keys()):
    print(f"成績?yōu)閧score_value}分的有{score_count[score_value]}人")

# 6. 字典常用操作演示
print("\n=== 字典操作演示 ===")
# 新增分?jǐn)?shù)85的統(tǒng)計(jì)
score_count[85] = 1
print("新增85分后:", score_count)
# 修改80分的統(tǒng)計(jì)次數(shù)
score_count[80] = 3
print("修改80分次數(shù)后:", score_count)
# 刪除85分的統(tǒng)計(jì)
del score_count[85]
print("刪除85分后:", score_count)

七、總結(jié)

本文以“班級分?jǐn)?shù)統(tǒng)計(jì)”為核心案例,詳細(xì)拆解了Python中列表、集合、字典的核心區(qū)別,核心要點(diǎn)總結(jié)如下:

  1. 列表是“有序的容器”,適合存儲原始、有序、可重復(fù)的數(shù)據(jù),核心標(biāo)識是 [];
  2. 集合是“去重的工具”,適合去重和集合運(yùn)算,核心標(biāo)識是 set()(空)/{元素}(非空);
  3. 字典是“映射的通訊錄”,適合存儲鍵值對關(guān)系,核心標(biāo)識是 {key: value},空字典為 {};
  4. 新手避坑:{} 是空字典,不是空集合;集合元素和字典鍵必須是不可變類型。

掌握這三大數(shù)據(jù)結(jié)構(gòu)的區(qū)別,是Python入門的關(guān)鍵一步。建議你結(jié)合本文的案例代碼多動手運(yùn)行、修改,通過實(shí)際操作加深理解——當(dāng)你能根據(jù)需求快速選擇合適的數(shù)據(jù)結(jié)構(gòu)時,就真正掌握了Python數(shù)據(jù)結(jié)構(gòu)的核心邏輯。

到此這篇關(guān)于Python列表、集合、字典核心區(qū)別的文章就介紹到這了,更多相關(guān)Python列表、集合、字典區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django使用rest_framework寫出API

    Django使用rest_framework寫出API

    這篇文章主要介紹了Django使用rest_framework寫出API,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • python 計(jì)算積分圖和haar特征的實(shí)例代碼

    python 計(jì)算積分圖和haar特征的實(shí)例代碼

    今天小編就為大家分享一篇python 計(jì)算積分圖和haar特征的實(shí)例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python中的re模塊之正則表達(dá)式模塊常用方法

    Python中的re模塊之正則表達(dá)式模塊常用方法

    re模塊是Python中使用正則表達(dá)式的最基礎(chǔ)的模塊,re模塊的這些功能覆蓋了正則表達(dá)式的常見用法,使用re模塊可以簡化字符串的模式匹配、信息提取、過濾替換、切分等操作,本文給大家介紹正則表達(dá)式模塊常用方法,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • python3基于OpenCV實(shí)現(xiàn)證件照背景替換

    python3基于OpenCV實(shí)現(xiàn)證件照背景替換

    這篇文章主要為大家詳細(xì)介紹了python3基于OpenCV實(shí)現(xiàn)證件照背景替換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • pandas如何讀取mysql數(shù)據(jù)

    pandas如何讀取mysql數(shù)據(jù)

    這篇文章主要介紹了pandas如何讀取mysql數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python爬蟲簡單運(yùn)用爬取代理IP的實(shí)現(xiàn)

    Python爬蟲簡單運(yùn)用爬取代理IP的實(shí)現(xiàn)

    這篇文章主要介紹了Python爬蟲簡單運(yùn)用爬取代理IP的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 基于tkinter中ttk控件的width-height設(shè)置方式

    基于tkinter中ttk控件的width-height設(shè)置方式

    這篇文章主要介紹了基于tkinter中ttk控件的width-height設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • python之列表的高級應(yīng)用及說明

    python之列表的高級應(yīng)用及說明

    本文介紹了Python列表的基本概念、定義方式及應(yīng)用,包括如何定義列表、統(tǒng)計(jì)元素、數(shù)據(jù)增刪改查、列表索引取值、深淺拷貝的區(qū)別與應(yīng)用方法等,此外,還詳細(xì)講解了列表的迭代、數(shù)據(jù)處理、緩存機(jī)制及常見的數(shù)據(jù)結(jié)構(gòu)算法,如線性搜索、二分搜索、排序算法等
    2026-05-05
  • python中np.multiply()、np.dot()和星號(*)三種乘法運(yùn)算的區(qū)別詳解

    python中np.multiply()、np.dot()和星號(*)三種乘法運(yùn)算的區(qū)別詳解

    這篇文章主要介紹了python中np.multiply()、np.dot()和星號(*)三種乘法運(yùn)算的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python語言異常處理測試過程解析

    Python語言異常處理測試過程解析

    這篇文章主要介紹了Python語言異常處理測試過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01

最新評論

房山区| 湟中县| 昌平区| 红安县| 清远市| 西藏| 合作市| 林甸县| 长治市| 芒康县| 宜黄县| 岳普湖县| 西城区| 上蔡县| 新乡市| 鲁甸县| 龙岩市| 思南县| 商南县| 长治市| 晋中市| 巢湖市| 应城市| 汶上县| 富顺县| 玉门市| 革吉县| 楚雄市| 吉隆县| 宜君县| 富川| 扬中市| 天全县| 武冈市| 龙游县| 额济纳旗| 阜阳市| 涿州市| 延津县| 阿拉尔市| 越西县|