Python:列表的進階技巧

列表(list)作為 Python 最常用的數據結構之一,不僅能存儲有序數據,還能在推導式、函數參數傳遞、數據處理等場景中發揮強大作用。

下面介紹一些進階技巧與常見應用。

一、去重與排序

1、快速去重(不保序)

nums = [1, 2, 2, 3, 4, 4, 5]unique = list(set(nums))print(unique) ??# [1, 2, 3, 4, 5](順序不保證)

2、去重并保序

nums = [1, 2, 2, 3, 4, 4, 5]unique_stable = list(dict.fromkeys(nums))print(unique_stable) ?# [1, 2, 3, 4, 5]

3、自定義排序

words = ["banana",?"apple",?"cherry"]words.sort(key=len) ? # 按長度排序print(words) ? # ['apple',?'banana',?'cherry']

二、列表與函數參數

列表可靈活地與 *args、**kwargs 結合,支持參數解包與動態傳參。

1、作為可變參數傳遞

def?add(x, y, z):? ??return?x + y + z
args = [1,?2,?3]print(add(*args)) ??# 6,列表拆包傳參

2、收集不定長參數

def?avg(*args):? ??return?sum(args) /?len(args)
print(avg(1,?2,?3,?4)) ??# 2.5,此處 args 是一個元組

3、同時接收必填和不定長參數

def?report(title, *items):? ??print(f"{title}:?{items}")
report("Scores",?80,?90,?85)# Scores: (80, 90, 85)

三、列表切片的進階用法

1、步長切片

nums =?list(range(10))print(nums[::2]) ??# [0, 2, 4, 6, 8],隔一個取一個

2、反轉列表

nums?=?[1, 2, 3, 4, 5]print(nums[::-1]) ? #?[5, 4, 3, 2, 1]

3、原地替換片段

lst?=?[1, 2, 3, 4, 5]lst[1:4] =?[20, 30]print(lst) ? #?[1, 20, 30, 5]

四、與內置函數搭配

1、map()?+ list():批量轉換

words = ["a",?"bb",?"ccc"]lengths =?list(map(len, words))print(lengths) ??# [1, 2, 3]

2、filter()?+ list():條件篩選

nums?=?[1, 2, 3, 4, 5, 6]evens?= list(filter(lambda x: x %?2?==?0, nums))print(evens) ? #?[2, 4, 6]

3、zip()?+ list():配對合并

names = ["Alice",?"Bob",?"Cathy"]scores = [85, 90, 78]pairs = list(zip(names, scores))print(pairs) ??# [('Alice', 85), ('Bob', 90), ('Cathy', 78)]

五、列表推平(flatten)

1、嵌套推導式展開二維列表

matrix?=?[[1, 2, 3], [4, 5, 6]]flat?=?[x for row in matrix for x in row]print(flat) ? #?[1, 2, 3, 4, 5, 6]

2、使用?itertools.chain

import itertools
matrix = [[1, 2, 3], [4, 5, 6]]flat = list(itertools.chain.from_iterable(matrix))print(flat) ??# [1, 2, 3, 4, 5, 6]

對于大數據量的嵌套列表,itertools.chain 更高效。

六、列表的性能優化技巧

1、列表 vs 集合查找

列表查找復雜度 O(n),集合平均 O(1),在需要頻繁查找時應考慮集合:

data =?list(range(100000))print(99999?in?data) ??# O(n),效率低
data_set =?set(data)print(99999?in?data_set) ?# O(1),效率高

2、避免 += 拼接列表

lst?=?[]for?i in range(1000):? ??lst?+=?[i] ? # ? 效率低
lst = []for?i in range(1000):? ??lst.append(i) ? # ? 效率高

3、推導式替代循環

列表推導式在多數場景下更簡潔高效:

lst?= [i for i in range(1000)] ??# 更簡潔高效

七、deque:高效雙端隊列

在需要頻繁從列表頭部插入/刪除時,collections.deque 更高效。

from?collections import deque
dq?= deque([1,?2,?3])dq.appendleft(0) ? ?# 左端添加dq.append(4) ? ? ? ?# 右端添加print(dq) ? ? ? ? ? # deque([0,?1,?2,?3,?4])
dq.popleft() ? ? ? ?# 左端刪除print(dq) ? ? ? ? ? # deque([1,?2,?3,?4])

deque 在雙端操作時復雜度為 O(1),比 list.insert(0, x) 更優。

📘 小結

去重與排序:set() 去重、dict.fromkeys() 保序、自定義排序

函數參數:支持拆包、收集不定長參數

切片技巧:步長、反轉、原地替換

函數式搭配:結合 map、filter、zip

推平技巧:嵌套推導式、itertools.chain

性能優化:選對數據結構,避免低效操作

deque:從列表頭部插入/刪除

圖片

“點贊有美意,贊賞是鼓勵”

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

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

相關文章

【完整源碼+數據集+部署教程】硬幣分類與識別系統源碼和數據集:改進yolo11-SWC

背景意義 隨著經濟的發展和數字支付的普及,傳統硬幣的使用逐漸減少,但在某些地區和特定場合,硬幣仍然是重要的支付手段。因此,硬幣的分類與識別在自動化支付、智能零售和物聯網等領域具有重要的應用價值。尤其是在銀行、商超和自助…

萊特萊德:以“第四代極限分離技術”,賦能生物發酵產業升級

萊特萊德:以“第四代極限分離技術”,賦能生物發酵產業升級Empowering Upgrades in the Bio-Fermentation Industry with "Fourth-Generation Extreme Separation Technology生物發酵行業正經歷從 “規模擴張” 向 “質效提升” 的關鍵轉型&#xff…

外賣大戰之后,再看美團的護城河

美團(03690.HK)于近日發布了2025年Q2財報,市場無疑將更多目光投向了其備受關注的外賣業務上。毫無懸念,受外賣競爭和加大投入的成本影響,美團在外賣業務上的財務數據受到明顯壓力,利潤大幅下跌,…

R包fastWGCNA - 快速執行WGCNA分析和下游分析可視化

最新版本: 1.0.0可以對著視頻教程學習和使用:然而還沒錄呢, 關注B站等我更新R包介紹 開發背景 WGCNA是轉錄組或芯片表達譜數據常用得分析, 可用來鑒定跟分組或表型相關得模塊基因和核心基因但其步驟非常之多, 每次運行起來很是費勁, 但需要修改的參數并不多所以完全…

GitHub 熱榜項目 - 日榜(2025-08-29)

GitHub 熱榜項目 - 日榜(2025-08-29) 生成于:2025-08-29 統計摘要 共發現熱門項目:11 個 榜單類型:日榜 本期熱點趨勢總結 本期GitHub熱榜展現出三大技術趨勢:1)AI應用持續深化,ChatGPT等大模型系統提示…

【深度學習實戰(58)】bash方式啟動模型訓練

export \PATHPYTHONPATH/workspace/mmlab/mmdetection/:/workspace/mmlab/mmsegmentation/:/workspace/mmlab/mmdeploy/:${env:PYTHONPATH} \CUDA_VISIBLE_DEVICES0 \DATA_ROOT_1/mnt/data/…/ \DATA_ROOT_2/mnt/data/…/ \DATA_ROOT_MASK/…/ \PATH_COMMON_PACKAGES_SO…sonoh…

【物聯網】關于 GATT (Generic Attribute Profile)基本概念與三種操作(Read / Write / Notify)的理解

“BLE 讀寫”在這里具體指什么? 在你的系統里,樹莓派是 BLE Central,Arduino 是 BLE Peripheral。 Central 和 Peripheral 通過 **GATT 特征(Characteristic)**交互:讀(Read)&#x…

JavaSE丨集合框架入門(二):從 0 掌握 Set 集合

這節我們接著學習 Set 集合。一、Set 集合1.1 Set 概述java.util.Set 接口繼承了 Collection 接口,是常用的一種集合類型。 相對于之前學習的List集合,Set集合特點如下:除了具有 Collection 集合的特點,還具有自己的一些特點&…

金屬結構疲勞壽命預測與健康監測技術—— 融合能量法、紅外熱像技術與深度學習的前沿實踐

理論基礎與核心方法 疲勞經典理論及其瓶頸 1.1.疲勞失效的微觀與宏觀機理: 裂紋萌生、擴展與斷裂的物理過程。 1.2.傳統方法的回顧與評析。 1.3.引出核心問題:是否存在一個更具物理意義、能統一描述疲勞全過程(萌生與擴展)且試驗量…

【貪心算法】day4

📝前言說明: 本專欄主要記錄本人的貪心算法學習以及LeetCode刷題記錄,按專題劃分每題主要記錄:(1)本人解法 本人屎山代碼;(2)優質解法 優質代碼;&#xff…

AI 與腦機接口的交叉融合:當機器 “讀懂” 大腦信號,醫療將迎來哪些變革?

一、引言(一)AI 與腦機接口技術的發展現狀AI 的崛起與廣泛應用:近年來,人工智能(AI)技術迅猛發展,已廣泛滲透至各個領域。從圖像識別、自然語言處理到智能決策系統,AI 展現出強大的數…

uniapp vue3 canvas實現手寫簽名

userSign.vue <template><view class"signature"><view class"btn-box" v-if"orientation abeam"><button click"clearClick">重簽</button><button click"finish">完成簽名</butt…

頁面跳轉html

實現流程結構搭建&#xff08;HTML&#xff09;創建側邊欄容器&#xff0c;通過列表或 div 元素定義導航項&#xff0c;每個項包含圖標&#xff08;可使用字體圖標庫如 Font Awesome&#xff09;和文字&#xff0c;為后續點擊交互預留事件觸發點。樣式設計&#xff08;CSS&…

Spring Boot自動裝配機制的原理

文章目錄一、自動裝配的核心觸發點&#xff1a;SpringBootApplication二、EnableAutoConfiguration的作用&#xff1a;導入自動配置類三、自動配置類的加載&#xff1a;SpringFactoriesLoader四、自動配置類的條件篩選&#xff1a;Conditional注解五、自動配置的完整流程六、自…

(未完結)階段小總結(一)——大數據與Java

jdk8-21特性核心特征&#xff1a;&#xff08;8&#xff09;lambda&#xff0c;stream api&#xff0c;optional&#xff0c;方法引用&#xff0c;函數接口&#xff0c;默認方法&#xff0c;新時間Api&#xff0c;函數式接口&#xff0c;并行流&#xff0c;ComletableFuture。&…

嵌入式Linux驅動開發:設備樹與平臺設備驅動

嵌入式Linux驅動開發&#xff1a;設備樹與平臺設備驅動 引言 本筆記旨在詳細記錄嵌入式Linux驅動開發中設備樹&#xff08;Device Tree&#xff09;和平臺設備驅動&#xff08;Platform Driver&#xff09;的核心概念與實現。通過分析提供的代碼與設備樹文件&#xff0c;我們…

【完整源碼+數據集+部署教程】骨折檢測系統源碼和數據集:改進yolo11-EfficientHead

背景意義 骨折作為一種常見的骨骼損傷&#xff0c;其診斷和治療對患者的康復至關重要。傳統的骨折檢測方法主要依賴于醫生的經驗和影像學檢查&#xff0c;如X光、CT等&#xff0c;這不僅耗時&#xff0c;而且容易受到主觀因素的影響。隨著計算機視覺和深度學習技術的迅猛發展&a…

面試記錄7 c++軟件開發工程師

開目 一面&#xff1a; 自我介紹你做的xxx應用是用c做的嗎&#xff0c;是在window平臺嗎具體做的事情是什么你說的2D3D的結構是什么樣的&#xff0c;怎樣去做校驗有沒有二維到三維或者三維到二維的數據轉換兩個向量怎么去做校驗做的什么優化有調用第三方庫嗎是用的什么工具&…

計算機網絡:服務器處理多客戶端(并發服務器)

一、服務器處理多客戶端&#xff08;并發服務器&#xff09;&#xff08;一&#xff09;listen:監聽客戶端的連接請求&#xff0c;放入請求隊列&#xff08;二&#xff09;accpet&#xff1a;請求隊列中提取已連接的請求&#xff0c;返回連接好的fd&#xff08;循環accpet即可&…

Ansible自動化運維:原理以及安裝教程

目錄 Linux Ansible&#xff1a;作用與原理詳解 一、Ansible 的核心作用 1. 配置管理&#xff08;Configuration Management&#xff09; 2. 應用部署&#xff08;Application Deployment&#xff09; 3. 任務編排&#xff08;Orchestration&#xff09; 4. 其他擴展作用 二、A…