白騎士的Python教學進階篇 2.4 高級數據結構

系列目錄

上一篇:白騎士的Python教學進階篇 2.3?文件操作???????

????????在Python中,掌握高級數據結構可以顯著提升你的編程效率和代碼可讀性。高級數據結構包括列表推導式、生成器與迭代器以及裝飾器。本文將詳細介紹這些高級數據結構,幫助你在實際編程中更好地運用它們。

列表推導式

????????列表推導式(List Comprehensions)是Python的一種簡潔的語法,用于生成新的列表。通過列表推導式,可以用一行代碼表達復雜的列表生成邏輯,增強代碼的可讀性和簡潔性。

基本語法

????????列表推導式的基本語法如下:

[expression for item in iterable if condition]

????????'expression':生成新列表中元素的表達式。

????????’item‘:從 ‘iterable’?中取出的元素。

????????'iterable':一個可迭代對象,如列表、元組、字符串等。

????????’condition‘:一個可選的過濾條件,只有滿足條件的元素才會包含在新列表中。

示例

????????生成平方數列表:

squares = [x ** 2 for x in range(10)]
print(squares)

????????輸出:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

????????過濾偶數并生成其平方:

even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares)

????????輸出:

[0, 4, 16, 36, 64]

????????使用嵌套循環生成二維坐標:

coordinates = [(x, y) for x in range(3) for y in range(3)]
print(coordinates)

????????輸出:

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

生成器與迭代器

????????生成器和迭代器是Python中用于高效處理大量數據的強大工具。它們可以在不占用大量內存的情況下生成序列數據。

迭代器

????????迭代器是一種對象,它實現了迭代協議,包括 '__iter__()'?和 '__next__()'?方法。迭代器可以用于逐個訪問集合的元素,而不需要一次性將所有元素加載到內存中。

示例

class MyIterator:def __init__(self, data):self.data = dataself.index = 0def __iter__(self):return selfdef __next__(self):if self.index >= len(self.data):raise StopIterationresult = self.data[self.index]self.index += 1return resultmy_iter = MyIterator([1, 2, 3])
for item in my_iter:print(item)

????????輸出:

1
2
3

生成器

????????生成器是使用 'yield'?關鍵字的函數。每次調用生成器的 '__next__()'?方法時,生成器函數會運行到 'yield'?語句并返回結果,然后暫停,下一次調用時從暫停處繼續執行。

示例

????????簡單生成器:

def simple_generator():yield 1yield 2yield 3gen = simple_generator()for value in gen:print(value)

????????輸出:

1
2
3

????????無限斐波那契序列生成器:

def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + bfib = fibonacci()for _ in range(10):print(next(fib))

????????輸出:

0
1
1
2
3
5
8
13
21
34

????????生成器表達式是生成器的簡寫形式,類似于列表推導式,但使用小括號而不是方括號。

gen_exp = (x ** 2 for x in range(10))for value in gen_exp:print(value)

裝飾器

????????裝飾器是一種高級函數,它允許你在不修改函數代碼的前提下,增強或修改函數的行為。裝飾器通常用于日志記錄、權限檢查、緩存等場景。

基本語法

????????裝飾器是一個返回函數的高階函數,通常使用 '@decorator_name'?語法糖來應用裝飾器。

示例

????????基本裝飾器:

def my_decorator(func):def wrapper():print("Something is happening before the function is called.")func()print("Something is happening after the function is called.")return wrapper@my_decorator
def say_hello():print("Hello!")say_hello()

????????輸出:

Something is happening before the function is called.
Hello!
Something is happening after the function is called.

????????帶參數的裝飾器:

def repeat(num_times):def decorator_repeat(func):def wrapper(*args, **kwargs):for _ in range(num_times):result = func(*args, **kwargs)return resultreturn wrapperreturn decorator_repeat@repeat(num_times=3)
def greet(name):print(f"Hello, {name}!")greet("Alice")

????????輸出:

Hello, Alice!
Hello, Alice!
Hello, Alice!

????????類裝飾器:

class CountCalls:def __init__(self, func):self.func = funcself.num_calls = 0def __call__(self, *args, **kwargs):self.num_calls += 1print(f"Call {self.num_calls} of {self.func.__name__}")return self.func(*args, **kwargs)@CountCalls
def say_hello():print("Hello!")say_hello()
say_hello()

????????輸出:
?

Call 1 of say_hello
Hello!
Call 2 of say_hello
Hello!

結論

????????高級數據結構如列表推導式、生成器與迭代器以及裝飾器,是Python提供的強大工具,使開發者可以編寫簡潔、高效、可維護的代碼。通過掌握這些高級特性,可以在實際項目中更靈活地處理復雜的數據操作,提高代碼的執行效率,并且能夠在不改變原有代碼邏輯的情況下,輕松地擴展和增強功能。這些特性不僅提升了編程技能,也為解決實際問題提供了更多的解決方案。希望在實踐中多多應用這些高級數據結構,享受Python編程的樂趣。

下一篇:白騎士的Python教學高級篇 3.1 多線程與多進程???????

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

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

相關文章

算法刷題1-10大排序算法匯總

十種常見排序算法可以分為兩大類: 比較類排序:通過比較來決定元素間的相對次序,由于其時間復雜度不能突破O(nlogn),因此也稱為非線性時間比較類排序。非比較類排序:不通過比較來決定元素間的相對次序,它可…

服務器安裝Nginx教程

1、安裝所需依賴 yum -y install gcc gcc-c make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel 2、創建nginx目錄并下載Nginx安裝包 //進入/usr/local cd /usr/local//創建nginx目錄 mkdir nginx//進入nginx目錄 cd nginx//下載nginx tar包 wget http://…

Lesson 47 A cup of coffee

Lesson 47 A cup of coffee 詞匯 like v. 喜歡,想要 用法:like 物品 / 人 喜歡……    like 動詞ing 喜歡做……(習慣性)    like to 動詞原形 喜歡做……(一次性) 例句:我喜歡小狗…

[leetcode hot 150]第五百三十題,二叉搜索樹的最小絕對差

題目: 給你一個二叉搜索樹的根節點 root ,返回 樹中任意兩不同節點值之間的最小差值 。 差值是一個正數,其數值等于兩值之差的絕對值。 解析: minDiffInBST 方法是主要方法。創建一個 ArrayList 來存儲樹的節點值。inorderTrave…

前端日常掃盲

一、js標簽語句 直接上代碼 for(let i 0; i < 10; i){console.log("頂層循環");for(let j 0; j < 10; j){console.log("內層循環",i,j);if(i * j > 30){console.log("退出頂層循環");break;}} }如上面的代碼&#xff0c;雙層循環&a…

opencv-yolo-tiny車輛檢測 ----20240705

opencv-yolo-tiny 實現車輛檢測 opencv.dnn模塊已經支持大部分格式的深度學習模型推理,該模塊可以直接加載tensorflow、darknet、pytorch等常見深度學習框架訓練出來的模型,并運行推理得到模型輸出結果。opecnv.dnn模塊已經作為一種模型部署方式,應用在工業落地實際場景中。…

持續交付:自動化測試與發布流程的變革

目錄 前言1. 持續交付的概念1.1 持續交付的定義1.2 持續交付的核心原則 2. 持續交付的優勢2.1 提高交付速度2.2 提高軟件質量2.3 降低發布風險2.4 提高團隊協作 3. 實施持續交付的步驟3.1 構建自動化測試體系3.1.1 單元測試3.1.2 集成測試3.1.3 功能測試3.1.4 性能測試 3.2 構建…

(一)進程與線程

一、進程和線程的概念 1.1 進程 程序由指令和數據組成&#xff0c;但這些指令要運行&#xff0c;數據要讀寫&#xff0c;就必須將指令加載至CPU&#xff0c;數據加載至內存。在指令運行過程中還需要用到磁盤、網絡等設備。進程就是用來加載指令、管理內存、管理 IO 的。當一個…

鴻蒙系統的開發與學習

1.開發工具的下載 DevEco Studio-HarmonyOS Next Beta版-華為開發者聯盟 安裝、環境配置時&#xff0c;建議 自定義目錄 注意&#xff1a;路徑中不要有 中文、特殊字符。 2.ArkTS基礎總結 1&#xff09;三種數據類型 ① string 字符串&#xff1a;描述信息 ② number 數…

銀聯快捷支付的優點!

快速支付&#xff0c;又稱電子支付或第三方支付&#xff0c;在行業中得到了廣泛的應用。用戶只需通過銀行完成交易。方便快捷是指銀行可以在任何條件下支持用戶之間的轉賬、支付等即時結算服務。快速支付是指用戶可以通過手機實現銀行卡等相關操作。然而&#xff0c;現在大多數…

Java后端每日面試題(day1)

目錄 JavaWeb三大組件依賴注入的方式Autowire和Resurce有什么區別&#xff1f;Spring Boot的優點Spring IoC是什么&#xff1f;說說Spring Aop的優點Component和Bean的區別自定義注解時使用的RetentionPolicy枚舉類有哪些值&#xff1f;如何理解Spring的SPI機制&#xff1f;Spr…

聽說現在AI產品經理薪資30k起步?0基礎可以轉行AI產品嗎?

2024年&#xff0c;還有什么新風口&#xff1f; AI、元宇宙、NFT… 很多人不知道&#xff0c;其實不管是元宇宙還是NFT&#xff0c;它們本質上就是人工智能領域。 AI自身應用領域非常廣泛&#xff0c;大批高薪崗位隨之涌了出來&#xff0c;包括AI產品經理。 AI產品經歷具體工…

CSS Float(浮動)

CSS Float(浮動) 概述 CSS Float(浮動)是一種布局技術,它允許開發人員將元素(如圖片或文本)沿著其容器的左側或右側放置,并且讓其他內容圍繞它流動。這種技術在過去被廣泛用于創建多欄布局,盡管現代CSS提供了更多高級的布局方法(如Flexbox和Grid),但理解浮動仍然…

【LeetCode:841. 鑰匙和房間 + DFS】

&#x1f680; 算法題 &#x1f680; &#x1f332; 算法刷題專欄 | 面試必備算法 | 面試高頻算法 &#x1f340; &#x1f332; 越難的東西,越要努力堅持&#xff0c;因為它具有很高的價值&#xff0c;算法就是這樣? &#x1f332; 作者簡介&#xff1a;碩風和煒&#xff0c;…

安卓手機已刪除短信如何恢復?這2個技巧,找回離家出走的短信

手機宛如一座豐富的寶庫&#xff0c;珍藏著生活中的點滴回憶。其中&#xff0c;短信作為溝通的橋梁&#xff0c;記錄著我們與親朋好友間的溫情脈脈&#xff0c;承載著無數珍貴的瞬間。然而&#xff0c;有時&#xff0c;我們卻會不慎觸發寶庫中的機關&#xff0c;使得這些寶貴的…

陳文自媒體:30歲房貸1000萬,杠杠超乎想象!

首先寫這個文章我要聲明&#xff0c;這個內容沒有傳播負能量&#xff0c;沒有傳播所謂的焦慮&#xff0c;我只是想表達一下我的觀點。 昨天的中金30歲女士的事件&#xff0c;我相信很多網友都知道了&#xff0c;已經上了熱搜了。 簡單總結一下原因&#xff0c;據說是她和老公…

【計算智能】遺傳算法(二):基本遺傳算法在優化問題中的應用【實驗】

前言 本系列文章架構概覽&#xff1a; 本文將介紹基本遺傳算法在解決優化問題中的應用,通過實驗展示其基本原理和實現過程&#xff1a;選取一個簡單的二次函數作為優化目標&#xff0c;并利用基本遺傳算法尋找其在指定范圍內的最大值。 2. 基本遺傳算法&#xff08;SGA&#x…

面試公司的時候一般要問HR的問題和關注的福利待遇(比較重要,親測)

1.問是否雙休&#xff0c;是否有五險一金 2.問福利待遇&#xff0c;是否包吃住&#xff0c;是否有班車及補貼等 3.是否加班 4.是否有健身房&#xff0c;食堂等設施 5.是否出差&#xff0c;在哪個城市 6.工作地點能不能選擇 7.晉升機會怎么樣&#xff0c;什么時候才能晉升&#…

從0構建一款appium-inspector工具

上一篇博客從源碼層面解釋了appium-inspector工具實現原理&#xff0c;這篇博客將介紹如何從0構建一款簡單的類似appium-inspector的工具。如果要實現一款類似appium-inspector的demo工具&#xff0c;大致需要完成如下六個模塊內容 啟動 Appium 服務器連接到移動設備或模擬器啟…

vue 中 使用騰訊地圖 (動態引用騰訊地圖及使用簽名驗證)

在設置定位的時候使用 騰訊地圖 選擇地址 在 mounted中引入騰訊地圖&#xff1a; this.website.mapKey 為地圖的 key // 異步加載騰訊地圖APIconst script document.createElement(script);script.type text/javascript;script.src https://map.qq.com/api/js?v2.exp&…