【學Python自動化】 5. Python 數據結構學習筆記

一、 列表詳解

1 列表方法總結
方法描述等價操作rust Vec類似操作
list.append(x)末尾添加元素a[len(a):] = [x]vec.push(x);
list.extend(iterable)擴展列表a[len(a):] = iterablevec.extend([4, 5, 6]); 或者更高效:vec.extend_from_slice(&[4, 5, 6]);
list.insert(i, x )指定位置插入vec.insert(1,X);
list.remove(x)刪除第一個值為x的元素
list.pop([i])移除并返回指定位置元素vec.pop(); 及vec.remove(1);
list.clear()清空列表del a[:]vec.clear()
list.index(x[, start[, end]])返回第一個x的索引
list.count(x)統計x出現次數
list.sort(*, key=None, reverse=False)原地排序vec.sort();vec.sort_by(
list.reverse()原地反轉
list.copy()淺拷貝a[:]
示例代碼

fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']fruits.count('apple')  # 2
fruits.index('banana')  # 3
fruits.index('banana', 4)  # 6 (從索引4開始找)fruits.reverse()  # 反轉列表
fruits.append('grape')  # 添加元素
fruits.sort()  # 排序
fruits.pop()  # 移除并返回最后一個元素
2 用列表實現堆棧(LIFO)

stack = [3, 4, 5]
stack.append(6)    # 壓棧 → [3, 4, 5, 6]
stack.append(7)    # 壓棧 → [3, 4, 5, 6, 7]
stack.pop()        # 出棧 → 7, 棧變為 [3, 4, 5, 6]
stack.pop()        # 出棧 → 6, 棧變為 [3, 4, 5]
3 用列表實現隊列(FIFO)- 不推薦

# 效率低,推薦使用 collections.deque
from collections import dequequeue = deque(["Eric", "John", "Michael"])
queue.append("Terry")     # 入隊
queue.append("Graham")    # 入隊
queue.popleft()           # 出隊 → 'Eric'
queue.popleft()           # 出隊 → 'John'
4 列表推導式

基本語法


# 傳統方式
squares = []
for x in range(10):squares.append(x**2)# 列表推導式(推薦)
squares = [x**2 for x in range(10)]

復雜示例


# 條件過濾
vec = [-4, -2, 0, 2, 4]
[x for x in vec if x >= 0]  # [0, 2, 4]# 應用函數
freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
[weapon.strip() for weapon in freshfruit]  # 去除空格# 嵌套循環
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]# 展平嵌套列表
vec = [[1,2,3], [4,5,6], [7,8,9]]
[num for elem in vec for num in elem]  # [1,2,3,4,5,6,7,8,9]
5 嵌套的列表推導式

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)]
# [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]# 更簡潔的方式(推薦)
list(zip(*matrix))

二、 del 語句


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

三、元組和序列

元組基本操作


# 創建元組
t = 12345, 54321, 'hello!'  # 打包
t[0]  # 12345# 解包
x, y, z = t# 嵌套元組
u = t, (1, 2, 3, 4, 5)# 不可變性(會報錯)
# t[0] = 88888# 包含可變對象的元組
v = ([1, 2, 3], [3, 2, 1])
v[0][0] = 999  # 可以修改列表內容

特殊元組


empty = ()                 # 空元組
singleton = 'hello',       # 單元素元組(注意逗號)
len(empty)     # 0
len(singleton) # 1

四、集合

集合操作


# 創建集合
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
# {'orange', 'banana', 'pear', 'apple'} (去重)# 成員檢測
'orange' in basket  # True# 集合運算
a = set('abracadabra')  # {'a', 'r', 'b', 'c', 'd'}
b = set('alacazam')     # {'a', 'c', 'l', 'm', 'z'}a - b  # 差集 {'r', 'd', 'b'}
a | b  # 并集 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
a & b  # 交集 {'a', 'c'}
a ^ b  # 對稱差集 {'r', 'd', 'b', 'm', 'z', 'l'}# 集合推導式
{x for x in 'abracadabra' if x not in 'abc'}  # {'r', 'd'}

五、字典

字典操作


# 創建字典
tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127  # 添加/修改# 訪問和刪除
tel['jack']  # 4098
del tel['sape']  # 刪除鍵
'guido' in tel  # True# 構造函數
dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
dict(sape=4139, guido=4127, jack=4098)  # 關鍵字參數方式# 字典推導式
{x: x**2 for x in (2, 4, 6)}  # {2: 4, 4: 16, 6: 36}

六、循環的技巧

字典循環


knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():print(k, v)

枚舉循環


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

并行循環


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}.')

反向和排序循環


# 反向循環
for i in reversed(range(1, 10, 2)):print(i)  # 9,7,5,3,1# 排序循環
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for i in sorted(basket):  # 按順序循環print(i)# 去重排序循環
for f in sorted(set(basket)):print(f)  # apple, banana, orange, pear

七、深入條件控制

比較運算符


# 鏈式比較
a < b == c  # 等價于 a < b and b == c# 布爾運算
A and not B or C  # 等價于 (A and (not B)) or C# 短路特性
string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
non_null = string1 or string2 or string3  # 'Trondheim'

八、序列比較

字典式順序比較


(1, 2, 3) < (1, 2, 4)  # True
[1, 2, 3] < [1, 2, 4]  # True
'ABC' < 'C' < 'Pascal' < 'Python'  # True
(1, 2, 3, 4) < (1, 2, 4)  # True (前兩個元素相等,第一個序列更長)
(1, 2) < (1, 2, -1)  # True (第二個序列更長)
(1, 2, 3) == (1.0, 2.0, 3.0)  # True (數值相等)

九、重要注意事項

  • 列表方法:insert, remove, sort 等方法返回 None,不要期待它們返回值

  • 可變性:列表可變,元組不可變

  • 集合去重:集合自動去除重復元素

  • 字典鍵:必須是不可變類型(字符串、數字、元組等)

  • 循環技巧:善用 enumerate(), zip(), reversed(), sorted(), set()

這些數據結構是Python編程的基礎,熟練掌握它們能大大提高編碼效率。

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

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

相關文章

Python爬蟲實戰:研究Radar chart,構建多維度數據采集和分析系統

1. 引言 1.1 研究背景與意義 在信息爆炸的時代,互聯網蘊含的海量數據已成為企業決策、學術研究和產品評估的重要依據。這些數據往往包含多個維度的特征,如電商平臺的商品信息涵蓋價格、銷量、評價、性能參數等,社交媒體的用戶數據涉及活躍度、互動量、內容偏好等。傳統的單…

[靈動微電子 MM32BIN560CN MM32SPIN0280]讀懂電機MCU之串口DMA

在 MM32SPIN560C 微控制器中&#xff0c;串口&#xff08;UART&#xff09;的 DMA 傳輸可大幅減輕 CPU 負擔&#xff0c;實現數據的“自動收發”。結合《MM32SPIN560C 用戶手冊&#xff08;中文版&#xff09;》中 UART 和 DMA 相關章節&#xff0c;以下從“原理匹配”“配置步…

【機器學習】-torch相關知識01

學習代碼時遇到的問題&#xff0c;GPT給的答案&#xff0c;如有錯誤請指出。 問題1 torch.empty nn.init.xavier 問題2 nn.Parameter 是什么&#xff1f; 問題3 self.add_module 問題4 torch.matmul torch.mm 文章目錄問題1 torch.empty nn.init.xavier問題2 nn.Parameter 是什…

Hutool DsFactory多數據源切換

一、簡單上手&#xff1a;從配置到使用全流程 DsFactory 的核心優勢是零侵入配置&#xff0c;支持多種配置方式&#xff0c;不管是 properties 文件還是代碼里直接定義&#xff0c;都能快速初始化數據源。先引依賴&#xff08;Maven&#xff09;&#xff1a; <dependency>…

Mysql中事務隔離級別有哪些?

Mysql中事務隔離級別有哪些&#xff1f; 讀未提交&#xff1a; 一個事務可以看到另一個事務尚未提交的數據。可能導致臟讀。 讀已提交&#xff1a; 一個事務只能看到其他事務提交后的數據。避免了臟讀&#xff0c;仍可能引發不可重復讀。 可重復讀&#xff1a; 可以確保一個事務…

el-carousel在新增或者刪除el-carousel-item時默認跳到第一頁的原因和解決

現象 使用走馬燈效果時 當el-carousel-item增加或者減少時&#xff0c;頁會跳到第一頁 體驗很不友好。 原因 當新增或這刪除el-carousel-item時&#xff0c;會觸發setActiveIndex&#xff08;props.initialindex&#xff09;, setActiveIndex的行為是小于0或者大于最大頁會有一…

人工智能學習:機器學習相關面試題(二)

7、有監督學習和無監督學習的區別 有監督學習&#xff1a; 對具有概念標記&#xff08;分類&#xff09;的訓練樣本進行 學習&#xff0c;以盡可能對訓練樣本集外的數據進行 標記&#xff08;分類&#xff09;預測。 這里 &#xff0c;所有的標記&#xff08;分類&#xff09…

python如何下載svg圖片

# 生成博客文章框架代碼 import datetimeblog_content f"""# Python如何下載SVG圖片## 引言 SVG&#xff08;可縮放矢量圖形&#xff09;作為一種基于XML的矢量圖形格式&#xff0c;在Web開發中廣泛應用。本文將介紹如何使用Python從網絡下載SVG圖片&#xff0…

Linux(一) | 初識Linux與目錄管理基礎命令掌握

個人主頁-愛因斯晨 文章專欄-Linux 最近學習人工智能時遇到一個好用的網站分享給大家&#xff1a; 人工智能學習 文章目錄個人主頁-愛因斯晨文章專欄-Linux一、前言1.為什么學習Linux2.操作系統概述&#xff1a;3.常見的操作系統&#xff1a;二、初識Linux1.誕生2.什么是Linux…

android-studio 安裝

下載地址 國內&#xff1a;https://developer.android.google.cn/studio?hlzh-cn 全國&#xff1a;https://developer.android.com/studio 1.設置 ANDROID_HOME 環境變量 ANDROID_HOME D:\zhy\android-studio\sdk 2. 更新 PATH 環境變量 %ANDROID_HOME%\platform-tools %AN…

【重學MySQL】九十三、MySQL字符集與比較規則完全解析

【重學MySQL】九十三、MySQL字符集與比較規則完全解析一、字符集概述1.1 支持的字符集1.2 UTF8與UTF8MB4的區別二、比較規則&#xff08;Collation&#xff09;2.1 比較規則分類2.2 常見比較規則差異三、配置層級與繼承關系3.1 配置層級3.2 繼承關系四、最佳實踐與問題解決4.1 …

基于Kafka的延遲隊列

實現原理 通過topic區分不同的延遲時長&#xff0c;每個topic對于一個延遲&#xff0c;比如 topic100 僅存儲延遲 100ms 的消息&#xff0c;topic1000 僅存儲延遲 1s 的消息&#xff0c;依次類推。生產消息時&#xff0c;消息需按延遲時長投遞到對應的topic。消費消息時&#x…

LabVIEW轉速儀校準系統

LabVIEW 與機器視覺的智能校準系統以工控機為核心&#xff0c;整合標準源、智能相機等硬件&#xff0c;通過軟件實現校準流程自動化&#xff0c;支持 500-6000r/min 轉速范圍校準&#xff0c;覆蓋 5 類轉速測量儀&#xff0c;校準時間縮短約 70%&#xff0c;滿足計量院高效、精…

Synchronized 概述

1. 初識 synchronized 是 Java 中的關鍵字&#xff0c;是一種 同步鎖 &#xff0c;可重入鎖&#xff0c;悲觀鎖。它修飾的對象有以下幾種&#xff1a; 具體表現為以下3種形式。 對于普通同步方法&#xff0c;鎖是當前實例對象。 對于靜態同步方法&#xff0c;鎖是當前類的 Clas…

通過Auth.log來查看VPS服務器是否被掃描和暴力破解及解決辦法

說明&#xff1a;很多人vps可能出現過被掃的情況&#xff0c;有的還被爆破了&#xff0c;這里提供下查看方法 查看用密碼登陸成功的IP地址及次數grep "Accepted password for root" /var/log/auth.log | awk {print $11} | sort | uniq -c | sort -nr | more查看用密…

碰一碰發視頻手機版源碼開發:支持OEM

**從事開發 20 年&#xff0c;見過不少技術風口起起落落&#xff0c;最近 “碰一碰發視頻” 又成了熱門話題。不少同行或剛入行的年輕人來問我&#xff0c;手機版源碼開發該從哪下手&#xff0c;怕踩坑、怕走彎路。今天就以一個老程序員的視角&#xff0c;把碰一碰發視頻手機版…

只出現一次的數字(總結)

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄前言一、給定一個整數數組nums&#xff0c;除了某個元素只出現一次以外&#xff0c;其余元素均出現兩次。找出那個只出現一次的元素二、給你一個整數數組nums&#x…

Cesium 入門教程(十一):Camera相機功能展示

文章目錄一&#xff0c;Cesium 實際示例&#xff08;含源代碼&#xff09;1&#xff0c;vuecesium&#xff1a; 圍繞一個固定點自動左右旋轉2&#xff0c;vuecesium&#xff1a; flyto一個具體的實體位置3&#xff0c;vuecesium&#xff1a; flyto一個具體的點位置4&#xff0c…

go語言基本排序算法

package mainimport "fmt"func main() {BubbleSort()SelectSort()InsertSort()MergeSort()QuickSort()HeapSort()ShellSort() }//冒泡排序 func BubbleSort() {str : []int{9, 1, 5, 8, 3, 7, 4, 6, 2}for i : 0; i < len(str)-1; i {flag : falsefor j : len(str…

一步完成CalDAV賬戶同步,日歷服務助力釘釘日歷日程集中管理

在信息爆炸節奏飛快的今天&#xff0c;高效的管理時間已經成為我們工作和生活中的核心競爭力&#xff0c;復雜紛繁的日程安排&#xff0c;無處不在的提醒需求以及跨設備同步的困擾&#xff0c;這些問題仿佛都在呼喚著一個更智能、更便捷、更可靠的解決方案。 而華為日歷App&am…