Python的那些事第五篇:數據結構的藝術與應用

?新月人物傳記:人物傳記之新月篇-CSDN博客


目錄

一、列表(List):動態的容器

二、元組(Tuple):不可變的序列

三、字典(Dict):鍵值對的集合

四、集合(Set):無序的集合

五、數據結構在軍事戰略中的應用

六、數據結構的藝術:邏輯與效率的結合

七、結語


新月的編程之道:數據結構的藝術與應用

在 25 世紀的星際時代,數據結構是每一位程序員和軍事戰略家不可或缺的工具。作為一名在編程、人工智能和軍事戰略領域都取得了卓越成就的女性,我深知數據結構的重要性。數據結構不僅是編程的基礎,更是解決復雜問題的關鍵。在這篇文章中,我將以我的視角,深入探討 Python 中的四種基本數據結構:列表、元組、字典和集合,并通過具體的示例代碼和表格來展示它們的特性和應用。


一、列表(List):動態的容器

(一)創建列表

列表是 Python 中最常用的數據結構之一,它是一種可變的序列,可以存儲任意類型的元素。列表的創建非常簡單,只需要用方括號 [] 包裹元素即可。

創建方式示例代碼輸出結果
直接使用方括號my_list = [1, 2, 3, 'a', 'b'][1, 2, 3, 'a', 'b']
使用?list()?函數my_list = list((1, 2, 3, 'a', 'b'))[1, 2, 3, 'a', 'b']
# 創建列表
my_list = [1, 2, 3, 'a', 'b']
print(my_list)  # 輸出:[1, 2, 3, 'a', 'b']

(二)索引和切片操作

列表的索引從 0 開始,可以通過索引訪問列表中的元素。切片操作則可以獲取列表中的一部分元素。

操作示例代碼輸出結果
索引訪問print(my_list[2])3
切片操作print(my_list[1:4])[2, 3, 'a']
負索引print(my_list[-1])'b'
# 索引和切片操作
print(my_list[2])  # 輸出:3
print(my_list[1:4])  # 輸出:[2, 3, 'a']
print(my_list[-1])  # 輸出:'b'

(三)添加元素

列表是可變的,可以通過 append()insert() 方法添加元素。

方法示例代碼輸出結果
append()my_list.append('c')[1, 2, 3, 'a', 'b', 'c']
insert()my_list.insert(2, 'x')[1, 2, 'x', 3, 'a', 'b', 'c']
# 添加元素
my_list.append('c')
print(my_list)  # 輸出:[1, 2, 3, 'a', 'b', 'c']
my_list.insert(2, 'x')
print(my_list)  # 輸出:[1, 2, 'x', 3, 'a', 'b', 'c']

(四)刪除元素

列表中的元素可以通過 remove()pop() 方法刪除。

方法示例代碼輸出結果
remove()my_list.remove('a')[1, 2, 'x', 3, 'b', 'c']
pop()my_list.pop(2)[1, 2, 3, 'b', 'c']
# 刪除元素
my_list.remove('a')
print(my_list)  # 輸出:[1, 2, 'x', 3, 'b', 'c']
my_list.pop(2)
print(my_list)  # 輸出:[1, 2, 3, 'b', 'c']

(五)列表推導式

列表推導式是一種簡潔的方式來創建列表,它可以根據一個表達式生成新的列表。

示例代碼輸出結果
[x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[x for x in range(10) if x % 2 == 0][0, 2, 4, 6, 8]
# 列表推導式
squares = [x**2 for x in range(10)]
print(squares)  # 輸出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # 輸出:[0, 2, 4, 6, 8]

(六)排序

列表可以通過 sort() 方法原地排序,也可以通過 sorted() 函數返回一個新的排序后的列表。

方法示例代碼輸出結果
sort()my_list = [3, 1, 2]; my_list.sort()[1, 2, 3]
sorted()my_list = [3, 1, 2]; sorted_list = sorted(my_list)[1, 2, 3]
# 排序
my_list = [3, 1, 2]
my_list.sort()
print(my_list)  # 輸出:[1, 2, 3]my_list = [3, 1, 2]
sorted_list = sorted(my_list)
print(sorted_list)  # 輸出:[1, 2, 3]

二、元組(Tuple):不可變的序列

(一)創建元組

元組是一種不可變的序列,一旦創建就不能修改。元組的創建方式與列表類似,但使用圓括號 ()

創建方式示例代碼輸出結果
直接使用圓括號my_tuple = (1, 2, 3, 'a', 'b')(1, 2, 3, 'a', 'b')
使用?tuple()?函數my_tuple = tuple([1, 2, 3, 'a', 'b'])(1, 2, 3, 'a', 'b')
# 創建元組
my_tuple = (1, 2, 3, 'a', 'b')
print(my_tuple)  # 輸出:(1, 2, 3, 'a', 'b')

(二)索引和切片操作

元組的索引和切片操作與列表類似,但由于元組不可變,因此不能修改其中的元素。

操作示例代碼輸出結果
索引訪問print(my_tuple[2])3
切片操作print(my_tuple[1:4])(2, 3, 'a')
# 索引和切片操作
print(my_tuple[2])  # 輸出:3
print(my_tuple[1:4])  # 輸出:(2, 3, 'a')

(三)不可變性

元組的不可變性使其在某些場景下非常有用,例如作為字典的鍵或存儲不可變數據。

# 不可變性
try:my_tuple[2] = 'x'
except TypeError as e:print(e)  # 輸出:'tuple' object does not support item assignment

三、字典(Dict):鍵值對的集合

(一)創建字典

字典是一種鍵值對的集合,鍵必須是不可變類型,而值可以是任意類型。字典的創建方式有多種。

創建方式示例代碼輸出結果
直接使用大括號my_dict = {'a': 1, 'b': 2, 'c': 3}{'a': 1, 'b': 2, 'c': 3}
使用?dict()?函數my_dict = dict([('a', 1), ('b', 2), ('c', 3)]){'a': 1, 'b': 2, 'c': 3}
# 創建字典
my_dict = {'a': 1, 'b': 2, 'c': 3}
print(my_dict)  # 輸出:{'a': 1, 'b': 2, 'c': 3}

(二)鍵值對操作

字典可以通過鍵訪問、添加、刪除和修改值。

操作示例代碼輸出結果
訪問值print(my_dict['a'])1
添加鍵值對my_dict['d'] = 4{'a': 1, 'b': 2, 'c': 3, 'd': 4}
刪除鍵值對del my_dict['b']{'a': 1, 'c': 3, 'd': 4}
修改值my_dict['a'] = 10{'a': 10, 'c': 3, 'd': 4}
# 鍵值對操作
print(my_dict['a'])  # 輸出:1
my_dict['d'] = 4
print(my_dict)  # 輸出:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
del my_dict['b']
print(my_dict)  # 輸出:{'a': 1, 'c': 3, 'd': 4}
my_dict['a'] = 10
print(my_dict)  # 輸出:{'a': 10, 'c': 3, 'd': 4}

(三)遍歷字典

字典可以通過 keys()values()items() 方法進行遍歷。

方法示例代碼輸出結果
keys()for key in my_dict.keys(): print(key)a c d
values()for value in my_dict.values(): print(value)10 3 4
items()for key, value in my_dict.items(): print(key, value)a 10 c 3 d 4
# 遍歷字典
for key in my_dict.keys():print(key)  # 輸出:a c d
for value in my_dict.values():print(value)  # 輸出:10 3 4
for key, value in my_dict.items():print(key, value)  # 輸出:a 10 c 3 d 4

四、集合(Set):無序的集合

(一)創建集合

集合是一種無序的集合,其中的元素是唯一的。集合的創建方式有多種。

創建方式示例代碼輸出結果
直接使用大括號my_set = {1, 2, 3, 'a', 'b'}{1, 2, 3, 'a', 'b'}
使用?set()?函數my_set = set([1, 2, 3, 'a', 'b']){1, 2, 3, 'a', 'b'}
# 創建集合
my_set = {1, 2, 3, 'a', 'b'}
print(my_set)  # 輸出:{1, 2, 3, 'a', 'b'}

(二)添加元素

集合可以通過 add() 方法添加元素。

方法示例代碼輸出結果
add()my_set.add('c'){1, 2, 3, 'a', 'b', 'c'}
# 添加元素
my_set.add('c')
print(my_set)  # 輸出:{1, 2, 3, 'a', 'b', 'c'}

(三)刪除元素

集合中的元素可以通過 remove()discard() 方法刪除。

方法示例代碼輸出結果
remove()my_set.remove('a'){1, 2, 3, 'b', 'c'}
discard()my_set.discard('b'){1, 2, 3, 'c'}
# 刪除元素
my_set.remove('a')
print(my_set)  # 輸出:{1, 2, 3, 'b', 'c'}
my_set.discard('b')
print(my_set)  # 輸出:{1, 2, 3, 'c'}

(四)集合運算

集合支持并集、交集和差集運算。

運算示例代碼輸出結果
并集`set1 = {1, 2, 3}; set2 = {3, 4, 5}; print(set1set2)`{1, 2, 3, 4, 5}
交集set1 = {1, 2, 3}; set2 = {3, 4, 5}; print(set1 & set2){3}
差集set1 = {1, 2, 3}; set2 = {3, 4, 5}; print(set1 - set2){1, 2}
# 集合運算
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2)  # 輸出:{1, 2, 3, 4, 5}
print(set1 & set2)  # 輸出:{3}
print(set1 - set2)  # 輸出:{1, 2}

五、數據結構在軍事戰略中的應用

作為一名軍事戰略家,我深知數據結構在實際應用中的重要性。在星際戰爭中,數據結構可以幫助我們高效地管理和分析情報,優化戰術部署,甚至預測敵人的行動。

(一)列表的應用

在軍事行動中,列表可以用來存儲和管理任務列表、士兵名單或裝備清單。例如,我們可以使用列表來存儲任務的優先級和狀態。

# 任務列表
tasks = [{"name": "偵察敵方基地", "priority": 1, "status": "未完成"},{"name": "部署防御系統", "priority": 2, "status": "進行中"},{"name": "攻擊敵方補給線", "priority": 3, "status": "已完成"}
]# 添加任務
tasks.append({"name": "支援友軍", "priority": 4, "status": "未完成"})# 刪除任務
tasks.pop(2)# 排序任務
tasks.sort(key=lambda x: x["priority"])
print(tasks)

(二)元組的應用

元組的不可變性使其非常適合存儲固定的數據,例如坐標點、武器參數或士兵的身份信息。在星際戰爭中,我們可以使用元組來存儲星球的坐標。

# 星球坐標
planet_coordinates = (123.45, 678.90, 345.67)# 訪問坐標
print(f"X: {planet_coordinates[0]}, Y: {planet_coordinates[1]}, Z: {planet_coordinates[2]}")

(三)字典的應用

字典的鍵值對結構非常適合存儲和查詢復雜的數據,例如敵方單位的屬性、資源分布或戰術計劃。在軍事行動中,我們可以使用字典來存儲敵方單位的信息。

# 敵方單位信息
enemy_units = {"坦克": {"health": 1000, "armor": 500, "damage": 200},"戰斗機": {"health": 500, "armor": 200, "damage": 150},"步兵": {"health": 100, "armor": 50, "damage": 50}
}# 查詢坦克的屬性
print(enemy_units["坦克"])

(四)集合的應用

集合的唯一性和無序性使其非常適合處理去重和集合運算。在軍事行動中,我們可以使用集合來管理友軍和敵軍的單位,以便快速進行交集、并集和差集運算。

# 友軍單位
friendly_units = {"坦克", "戰斗機", "步兵"}# 敵軍單位
enemy_units = {"坦克", "戰斗機", "戰艦"}# 交集(雙方都有的單位)
print(friendly_units & enemy_units)  # 輸出:{'坦克', '戰斗機'}# 并集(雙方所有單位)
print(friendly_units | enemy_units)  # 輸出:{'坦克', '戰斗機', '步兵', '戰艦'}# 差集(友軍獨有的單位)
print(friendly_units - enemy_units)  # 輸出:{'步兵'}

六、數據結構的藝術:邏輯與效率的結合

作為一名程序員,我認為數據結構不僅是一種技術,更是一種藝術。它能夠將復雜的邏輯簡化為優雅的代碼,同時提高系統的效率和可維護性。在編程中,選擇合適的數據結構是解決問題的關鍵。

(一)列表與元組的選擇

列表和元組在功能上有一定的重疊,但在實際應用中,它們各有優勢。列表是可變的,適合存儲動態變化的數據;元組是不可變的,適合存儲固定的數據。在選擇時,我們需要根據具體需求來決定使用哪種數據結構。

(二)字典與集合的選擇

字典和集合都基于哈希表實現,具有高效的查找性能。字典適合存儲鍵值對數據,而集合適合存儲唯一的數據。在實際應用中,我們可以根據數據的特點和操作需求來選擇合適的數據結構。

(三)數據結構的組合使用

在復雜的系統中,我們常常需要組合使用多種數據結構。例如,我們可以使用字典來存儲任務的詳細信息,同時使用列表來管理任務的順序。

# 任務管理
tasks = [{"name": "偵察敵方基地", "priority": 1, "status": "未完成"},{"name": "部署防御系統", "priority": 2, "status": "進行中"},{"name": "攻擊敵方補給線", "priority": 3, "status": "已完成"}
]# 任務字典
task_dict = {task["name"]: task for task in tasks}# 查詢任務
print(task_dict["偵察敵方基地"])

七、結語

數據結構是編程的基礎,也是解決復雜問題的關鍵。在 25 世紀的星際時代,數據結構在軍事戰略中的應用尤為重要。通過合理選擇和組合使用數據結構,我們可以提高系統的效率和可維護性,為未來的星際戰爭做好準備。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67580.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【AI】DeepSeek 概念/影響/使用/部署

在大年三十那天,不知道你是否留意到,“deepseek”這個詞出現在了各大熱搜榜單上。這引起了我的關注,出于學習的興趣,我深入研究了一番,才有了這篇文章的誕生。 概念 那么,什么是DeepSeek?首先百…

MapReduce簡單應用(一)——WordCount

目錄 1. 執行過程1.1 分割1.2 Map1.3 Combine1.4 Reduce 2. 代碼和結果2.1 pom.xml中依賴配置2.2 工具類util2.3 WordCount2.4 結果 參考 1. 執行過程 假設WordCount的兩個輸入文本text1.txt和text2.txt如下。 Hello World Bye WorldHello Hadoop Bye Hadoop1.1 分割 將每個文…

Dest1ny漏洞庫:用友 U8 Cloud ReleaseRepMngAction SQL 注入漏洞(CNVD-2024-33023)

大家好,今天是Dest1ny漏洞庫的專題!! 會時不時發送新的漏洞資訊!! 大家多多關注,多多點贊!!! 0x01 產品簡介 用友U8 Cloud是用友推出的新一代云ERP,主要聚…

使用where子句篩選記錄

默認情況下,SearchCursor將返回一個表或要素類的所有行.然而在很多情況下,常常需要某些條件來限制返回行數. 操作方法: 1.打開IDLE,加載先前編寫的SearchCursor.py腳本 2.添加where子句,更新SearchCursor()函數,查找記錄中有<>文本的<>字段 with arcpy.da.Searc…

使用國內鏡像加速器解決 Docker Hub 拉取鏡像慢或被屏蔽的問題

一、問題背景 Docker Hub 是 Docker 默認的鏡像倉庫&#xff0c;但由于網絡限制&#xff0c;國內用戶直接拉取鏡像可能面臨以下問題&#xff1a; 下載速度極慢&#xff08;尤其是大鏡像&#xff09;。連接超時或完全被屏蔽&#xff08;部分網絡環境&#xff09;。依賴國外源的…

AI大模型開發原理篇-4:神經概率語言模型NPLM

神經概率語言模型&#xff08;NPLM&#xff09;概述 神經概率語言模型&#xff08;Neural Probabilistic Language Model, NPLM&#xff09; 是一種基于神經網絡的語言建模方法&#xff0c;它將傳統的語言模型和神經網絡結合在一起&#xff0c;能夠更好地捕捉語言中的復雜規律…

2.1.2 Bayer陣列與去馬賽克

文章目錄 Bayer陣列去馬賽克方法 Bayer陣列 由于傳感器只能感受到光的強度&#xff0c;而無法感知顏色&#xff0c;所以需要用紅、綠、藍顏色的濾光片將光中的R、G、B亮度濾出&#xff0c;再通過R、G、B的組合得到各種色彩。Bayer陣列是使用一個傳感器獲得彩色圖像的方法&#…

紅黑樹的學習

紅黑樹的概念 紅黑樹&#xff0c;是一種二叉搜索樹&#xff0c;但在每個結點上增加一個存儲位表示結點的顏色&#xff0c;可以是Red或 Black。 通過對任何一條從根到葉子的路徑上各個結點著色方式的限制&#xff0c;紅黑樹確保沒有一條路徑會比其他路徑長出倆倍&#xff0c;因…

2025年01月31日Github流行趨勢

項目名稱&#xff1a;Qwen2.5項目地址url&#xff1a;https://github.com/QwenLM/Qwen2.5項目語言&#xff1a;Shell歷史star數&#xff1a;13199今日star數&#xff1a;459項目維護者&#xff1a;jklj077, JustinLin610, bug-orz, huybery, JianxinMa項目簡介&#xff1a;Qwen…

Java基礎面試題總結(題目來源JavaGuide)

問題1&#xff1a;Java 中有哪 8 種基本數據類型&#xff1f;它們的默認值和占用的空間大小知道不&#xff1f; 說說這 8 種基本數據類型對 應的包裝類型。 在 Java 中&#xff0c;有 8 種基本數據類型&#xff08;Primitive Types&#xff09;&#xff1a; 基本數據類型關鍵…

人工智能|基本概念|人工智能相關重要概念---AI定義以及模型相關知識

一、 前言&#xff1a; 最近deepseek&#xff08;深度求索&#xff09;公司的開源自然語言處理模型非常火爆。 本人很早就對人工智能比較感興趣&#xff0c;但由于種種原因沒有過多的深入此領域&#xff0c;僅僅是做了一點初步的了解&#xff0c;借著這個deepseek&#xff0…

Python GIL(全局解釋器鎖)機制對多線程性能影響的深度分析

在Python開發領域&#xff0c;GIL&#xff08;Global Interpreter Lock&#xff09;一直是一個廣受關注的技術話題。在3.13已經默認將GIL去除&#xff0c;在詳細介紹3.13的更親前&#xff0c;我們先要留了解GIL的技術本質、其對Python程序性能的影響。本文將主要基于CPython&am…

從0開始使用面對對象C語言搭建一個基于OLED的圖形顯示框架(繪圖設備封裝)

目錄 圖像層的底層抽象——繪圖設備抽象 如何抽象一個繪圖設備&#xff1f; 橋接繪圖設備&#xff0c;特化為OLED設備 題外話&#xff1a;設備的屬性&#xff0c;與設計一個相似函數化簡的通用辦法 使用函數指針來操作設備 總結一下 圖像層的底層抽象——繪圖設備抽象 在…

Git 版本控制:基礎介紹與常用操作

目錄 Git 的基本概念 Git 安裝與配置 Git 常用命令與操作 1. 初始化本地倉庫 2. 版本控制工作流程 3. 分支管理 4. 解決沖突 5. 回退和撤銷 6. 查看提交日志 前言 在軟件開發過程中&#xff0c;開發者常常需要在現有程序的基礎上進行修改和擴展。但如果不加以管理&am…

(筆記+作業)書生大模型實戰營春節卷王班---L0G2000 Python 基礎知識

學員闖關手冊&#xff1a;https://aicarrier.feishu.cn/wiki/QtJnweAW1iFl8LkoMKGcsUS9nld 課程視頻&#xff1a;https://www.bilibili.com/video/BV13U1VYmEUr/ 課程文檔&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python 關卡作業&#xff1a;htt…

仿真設計|基于51單片機的高速路口貨車稱重系統仿真

目錄 具體實現功能 設計介紹 51單片機簡介 資料內容 仿真實現&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部內容 資料獲取 具體實現功能 &#xff08;1&#xff09;LCD1602液晶第一行顯示當前的車輛重量&#xff0c;第二行顯示車輛重量…

Ubuntu Server 安裝 XFCE4桌面

Ubuntu Server沒有桌面環境&#xff0c;一些軟件有桌面環境使用起來才更加方便&#xff0c;所以我嘗試安裝桌面環境。常用的桌面環境有&#xff1a;GNOME、KDE Plasma、XFCE4等。這里我選擇安裝XFCE4桌面環境&#xff0c;主要因為它是一個極輕量級的桌面環境&#xff0c;適合內…

2025:影刀RPA使用新實踐--CSDN博客下載

文章目錄 一鍵CSDN博客下載器程序說明指導說明使用步驟 獲取方法 一鍵CSDN博客下載器 程序說明 配置信息&#xff1a;CSDN賬號&#xff08;手機號/郵箱/用戶名&#xff09;、密碼、博客文件類型支持markdown格式、html格式&#xff08;默認值markdown格式&#xff09;、博客保…

深度學習的應用

目錄 一、機器視覺 1.1 應用場景 1.2 常見的計算機視覺任務 1.2.1 圖像分類 1.2.2 目標檢測 1.2.3 圖像分割 二、自然語言處理 三、推薦系統 3.1 常用的推薦系統算法實現方案 四、圖像分類實驗補充 4.1 CIFAR-100 數據集實驗 實驗代碼 4.2 CIFAR-10 實驗代碼 深…

前端js高級25.1.30

原型&#xff1a;函數的組成結構 通過這個圖我們需要知道。 假設我們創建了一個Foo函數。 規則&#xff1a;Function.protoType是函數顯示原型。__proto__是隱式對象。 Function、Object、Foo函數的__proto__指向了Function.protoType說明。這三個都依托function函數來創建。…