2025-08-21 Python進階2——數據結構

文章目錄

  • 1 列表(List)
    • 1.1 列表常用方法
    • 1.2 列表的特殊用途
      • 1.2.1 實現堆棧(后進先出)
      • 1.2.2 實現隊列(先進先出)
    • 1.3 列表推導式
    • 1.4 嵌套列表推導式
  • 2 del 語句
  • 3 元組(Tuple)
  • 4 集合(Set)
    • 4.1 集合操作
    • 4.2 集合推導式
  • 5 字典(Dictionary)
    • 5.1 字典基本操作
    • 5.2 字典創建方式
    • 5.3 字典遍歷
  • 6 循環技巧
    • 6.1 遍歷字典
    • 6.2 帶索引遍歷序列
    • 6.3 同時遍歷多個序列
    • 6.4 反向遍歷
    • 6.5 排序遍歷
  • 7 序列比較

1 列表(List)

列表是 Python 中最常用的數據結構之一,是有序、可變的元素集合,支持多種操作方法。

1.1 列表常用方法

方法功能描述
list.append(x)在列表末尾添加元素 x
list.extend(iterable)擴展列表,添加可迭代對象的所有元素
list.insert(i, x)在索引 i 處插入元素 x
list.remove(x)刪除第一個值為 x 的元素
list.pop([i])移除并返回索引 i 處的元素(默認最后一個)
list.clear()清空列表
list.index(x[, start[, end]])返回 x 第一次出現的索引
list.count(x)統計 x 在列表中出現的次數
list.sort(key=None, reverse=False)就地排序列表
list.reverse()反轉列表元素
list.copy()返回列表的淺拷貝

示例

fruits = ['orange', 'apple', 'pear', 'banana']
print(fruits.count('apple'))  # 1
print(fruits.index('banana'))  # 3fruits.append('grape')
fruits.sort()
print(fruits)  # ['apple', 'banana', 'grape', 'orange', 'pear']fruits.reverse()
print(fruits)  # ['pear', 'orange', 'grape', 'banana', 'apple']

1.2 列表的特殊用途

1.2.1 實現堆棧(后進先出)

stack = [3, 4, 5]
stack.append(6)  # 入棧
stack.append(7)
print(stack)  # [3, 4, 5, 6, 7]print(stack.pop())  # 7(出棧)
print(stack)  # [3, 4, 5, 6]

1.2.2 實現隊列(先進先出)

列表作為隊列效率較低,推薦使用collections.deque

from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.append("Terry")  # 入隊
queue.append("Graham")print(queue.popleft())  # 'Eric'(出隊)
print(queue)  # deque(['John', 'Michael', 'Terry', 'Graham'])

1.3 列表推導式

簡潔創建列表的方式,格式:[表達式 for 變量 in 可迭代對象 if 條件]

示例

# 創建平方列表
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 過濾偶數
even_numbers = [x for x in range(20) if x % 2 == 0]
print(even_numbers)  # [0, 2, 4, ..., 18]# 處理字符串列表
words = ['  apple', 'banana  ', '  cherry  ']
stripped = [word.strip() for word in words]
print(stripped)  # ['apple', 'banana', 'cherry']

1.4 嵌套列表推導式

用于處理復雜結構,如矩陣轉置:

# 3x4矩陣
matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],
]# 轉置矩陣(行變列)
transposed = [[row[i] for row in matrix] for i in range(4)]
print(transposed)  # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

2 del 語句

用于刪除列表元素、切片或變量:

a = [-1, 1, 66.25, 333, 333, 1234.5]
del a[0]  # 刪除索引0的元素
print(a)  # [1, 66.25, 333, 333, 1234.5]del a[2:4]  # 刪除切片
print(a)  # [1, 66.25, 1234.5]del a[:]  # 清空列表
print(a)  # []del a  # 刪除變量a

3 元組(Tuple)

元組是有序、不可變的元素集合,用逗號分隔,通常用圓括號包裹。

  • 不可變:創建后不能修改元素
  • 可包含任意類型元素,包括可變對象
  • 支持索引和切片操作
  • 可用于打包和解包

示例

t = 12345, 54321, 'hello!'  # 元組打包
print(t[0])  # 12345# 元組嵌套
u = t, (1, 2, 3, 4, 5)
print(u)  # ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))# 元組解包
x, y, z = t
print(x, y, z)  # 12345 54321 hello!# 單元素元組(注意逗號)
singleton = 'hello',
print(singleton)  # ('hello',)

4 集合(Set)

集合是無序、不重復的元素集合,支持數學集合運算。

4.1 集合操作

basket = {'apple', 'orange', 'apple', 'pear'}
print(basket)  # {'orange', 'pear', 'apple'}(自動去重)# 成員檢測
print('orange' in basket)  # True# 集合運算
a = set('abracadabra')
b = set('alacazam')
print(a - b)  # 差集:{'r', 'd', 'b'}
print(a | b)  # 并集:{'a','c','r','d','b','m','z','l'}
print(a & b)  # 交集:{'a', 'c'}
print(a ^ b)  # 對稱差集:{'r','d','b','m','z','l'}

4.2 集合推導式

# 創建不包含某些元素的集合
a = {x for x in 'abracadabra' if x not in 'abc'}
print(a)  # {'r', 'd'}

5 字典(Dictionary)

字典是鍵值對的無序集合,鍵必須唯一且不可變,值可以是任意類型。

5.1 字典基本操作

tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127  # 添加鍵值對
print(tel)  # {'jack': 4098, 'sape': 4139, 'guido': 4127}print(tel['jack'])  # 4098(訪問值)del tel['sape']  # 刪除鍵值對
print(list(tel))  # ['jack', 'guido'](獲取鍵列表)

5.2 字典創建方式

# 1. 直接創建
d1 = {'name': 'Alice', 'age': 30}# 2. 使用dict()構造函數
d2 = dict([('name', 'Bob'), ('age', 25)])# 3. 字典推導式
d3 = {x: x*2 for x in range(3)}  # {0:0, 1:2, 2:4}# 4. 關鍵字參數
d4 = dict(name='Charlie', age=35)

5.3 字典遍歷

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():  # 同時獲取鍵和值print(k, v)

6 循環技巧

6.1 遍歷字典

for k, v in knights.items():print(k, v)

6.2 帶索引遍歷序列

for i, v in enumerate(['tic', 'tac', 'toe']):print(i, v)  # 0 tic, 1 tac, 2 toe

6.3 同時遍歷多個序列

questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):print(f"What is your {q}? It is {a}.")

6.4 反向遍歷

for i in reversed(range(1, 10, 2)):print(i)  # 9,7,5,3,1

6.5 排序遍歷

basket = ['apple', 'orange', 'apple', 'pear']
for f in sorted(set(basket)):  # 去重并排序print(f)  # apple, banana, orange, pear

7 序列比較

序列比較使用字典式順序:

  • 比較對應位置元素,直到找到不同元素
  • 短序列是長序列的前綴則短序列更小
  • 支持同類型序列比較
(1, 2, 3) < (1, 2, 4)  # True
[1, 2, 3] < [1, 2, 4]  # True
'ABC' < 'C' < 'Pascal' < 'Python'  # True
(1, 2, 3) == (1.0, 2.0, 3.0)  # True

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

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

相關文章

告別手工編寫測試腳本!Claude+Playwright MCP快速生成自動化測試腳本

在進行自動化測試時&#xff0c;前端頁面因為頻繁迭代UI 結構常有變動&#xff0c;這往往使得自動化測試的腳本往往“寫得快、廢得也快”&#xff0c;維護成本極高。在大模型之前大家往往都會使用錄制類工具&#xff0c;但錄制類工具生成的代碼靈活性較差、定位方式不太合理只能…

一款更適合 SpringBoot 的API文檔新選擇(Spring Boot 應用 API 文檔)

SpringDoc&#xff1a;Spring Boot 應用 API 文檔生成的現代化解決方案 概述 SpringDoc 是一個專為 Spring Boot 應用設計的開源庫&#xff0c;能夠自動生成符合 OpenAPI 3 規范的 API 文檔。它通過掃描項目中的控制器、方法注解及相關配置&#xff0c;動態生成 JSON/YAML/HTML…

文獻閱讀 250821-When and where soil dryness matters to ecosystem photosynthesis

When and where soil dryness matters to ecosystem photosynthesis 來自 <When and where soil dryness matters to ecosystem photosynthesis | Nature Plants> ## Abstract: Background: Projected increases in the intensity and frequency of droughts in the twen…

React學習(九)

目錄&#xff1a;1.react-進階-antd-新增2.react-進階-antd-刪除選中1.react-進階-antd-新增新增代碼&#xff0c;跟需改的代碼類似&#xff0c;直接copy修改組件代碼進行修改userEffect可以先帶著&#xff0c;沒啥用A6組件用到的函數跟修改的也類似&#xff1a;這個useEffect函…

零基礎從頭教學Linux(Day 17)

三層交換機一、三層交換機的配置1.關于如何配置三層交換機&#xff0c;首先我們應該先創建VLANSwitch>en Switch#vlan database % Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocument…

任務十四 推薦頁面接口開發

一、接口準備 在對接qq音樂接口之前,首先要將之前的項目,一定要記得備份一份; 備份完成之后,首先要在vscode終端安裝axios,這個是請求后端的工具,和之前的ajax一樣,都是請求后端的工具。只不過axios更專業化,跟強大 至于qq音樂接口怎么獲取,一般有兩個途徑,第一個是…

醫療AI與醫院數據倉庫的智能化升級:異構采集、精準評估與高效交互的融合方向(下)

核心功能創新詳解: 統一門戶與角色化工作臺: 統一入口: 用戶通過單一URL登錄,系統根據其角色和權限自動呈現專屬工作臺。 角色化工作臺: 臨床醫生工作臺: 首屏展示常用患者查詢入口、快速統計(如“我的患者檢驗異常趨勢”)、相關臨床文獻推薦、待處理任務(如報告審核)…

數據庫面試常見問題

數據庫 Delete Truncate Drop 區別 答:這三個操作都是針對數據庫的表進行操作,都有刪除表的功能,其中的區別在于: Delete:只將表中的數據進行刪除,不刪除定義不釋放空間,是dml語句,需要提交事務,如果不想刪除可以回滾。delete每次刪除一行,并在事務日志中為所刪除…

用nohup setsid繞過超時斷連,穩定反彈Shell

在We滲透過程中&#xff0c;我們常常會利用目標系統的遠程代碼執行&#xff08;RCE&#xff09;漏洞進行反彈Shell。然而&#xff0c;由于Web服務器&#xff08;如PHP、Python后端&#xff09;的執行環境通常存在超時限制&#xff08;如max_execution_time或進程管理策略&#…

Java設計模式-模板方法模式

Java設計模式-模板方法模式 模式概述 模板方法模式簡介 核心思想&#xff1a;定義一個操作中的算法骨架&#xff08;模板方法&#xff09;&#xff0c;將算法中某些步驟的具體實現延遲到子類中完成。子類可以在不改變算法整體結構的前提下&#xff0c;重定義這些步驟的行為&…

Centos7物理安裝 Redis8.2.0

Centos7物理安裝 Redis8.2.0一、準備依賴環境首先安裝編譯 Redis 所需的依賴&#xff1a;# CentOS/RHEL系統 yum install -y gcc gcc-c make wget 二、下載并編譯 Redis 8.2.0# 1. 下載Redis 8.2.0源碼包 wget https://download.redis.io/releases/redis-8.2.0.tar.gz# 2. 解壓…

牛津大學xDeepMind 自然語言處理(3)

條件語言模型無條件語言模型 概率計算&#xff1a;通過鏈式法則分解為預測下一詞概率&#xff08;將語言建模問題簡化為建模給定前面詞語歷史的下一個詞的概率&#xff09;基于循環神經網絡的無條件語言模型&#xff1a;根據歷史詞語預測下一個詞的概率條件語言模型 定義&#…

Vue2.x核心技術與實戰(一)

目錄 一、Vue2.x:快速上手+插值表達式+指令上 1.1 Vue快速上手 1.1.1 Vue概念 1.1.2 創建實例 1.1.3 插值表達式 { { }} 1.1.4 響應式特性 1.1.5 開發者工具 1.2 Vue指令 1.2.1 v-html 1.2.3 v-show / v-if v-show v-if 1.2.4 v-else / v-else-if 1.2.5 v-on v…

SCAU學習筆記 - 自科三面前端方向實戰演示

本來是準備寫完二面直接開始寫算法三面的&#xff0c;maimai那個封面圖我都做好了。但是可惡的出題人說要等我出完解析再針對性避開出題&#xff0c;所以swan決定把那個先擱置&#xff0c;本文我們先以2023年的自科三面前端方向題為例帶各位快速入門前端三件套&#xff08;因為…

前后端聯合實現文件上傳,實現 SQL Server image 類型文件上傳

1、前端 Vue3QualityFileInfoDialog.vue<script setup lang"ts" name"QualityFile"> ...... // 上傳&#xff0c;防抖 const onUploadClick debounce(() > {// 模擬點擊元素if (fileInputRef.value) {// 重置以允許重復選擇相同文件fileInputRef…

使用安卓平板,通過USB數據線(而不是Wi-Fi)來控制電腦(版本1)

這是一個對延遲和穩定性要求很高的場景。 核心原理是&#xff1a;利用USB數據線&#xff0c;在手機和電腦之間創建一個高速的“虛擬網絡連接”&#xff0c;然后在這個穩定的網絡通道上運行遠程控制軟件。 方案1&#xff1a; 在完全沒有無線網絡&#xff08;Wi-Fi&#xff09;和…

linux報permission denied問題

linux報permission denied問題 一般是沒有可執行權限&#xff0c;需要先添加執行權限 1. 確認文件權限 在你的項目目錄下執行&#xff1a; ls -l ./folder你可能會看到類似&#xff1a; -rw-r--r-- 1 user user 1234 Aug 18 12:00 script.sh注意&#xff1a;這里缺少 x&#xf…

Vue深入組件:組件事件詳解2

聲明觸發的事件 為了讓組件的用法更清晰(作為文檔),同時讓 Vue 能區分事件與透傳 attribute,推薦顯式聲明組件要觸發的事件。根據組件是否使用 <script setup>,聲明方式有所不同。 使用 <script setup> 時:defineEmits() 宏 在 <script setup> 中,…

FLASK項目快速構建

Flask 項目構建 exts.py # flask_sqlalchemy from flask_sqlalchemy import SQLAlchemy from flask_mail import Mail from flask_caching import Cache from flask_wtf import CSRFProtect from flask_avatars import Avatars from flask_jwt_extended import JWTManager from…

數據結構--2:ArrayList與順序表

1.順序表的創建 2.常見操作 3.遍歷 4.擴容機制 5.例子1.順序表的創建在集合框架中&#xff0c;ArrayList是?個普通的類&#xff0c;實現了List接口&#xff0c;具體框架圖如下&#xff1a;2.常見操作代碼…