【Python3】推導式

来源:https://www.cnblogs.com/ohwell2aha/archive/2022/07/19/16493768.html
-Advertisement-
Play Games

Python3的列表推導式、字典推導式、集合推導式和元組推導式,以及相應習題 ...


Python 推導式

參考文章:[1] (Python 推導式 | 菜鳥教程)

Python推導式是一種獨特的數據處理方式
可以從一個序列構建另一個新的數據序列的結構體

1 列表推導式

1.1 基本格式

[表達式 for 變數 in 列表]
或
[表達式 for 變數 in 列表 if 條件]
'''
1. 表達式
    可以是具有返回值的函數
2. for 變數 in 列表
    迭代列表將變數傳入表達式中
3. if 條件
    過濾列表中不符合條件的值
'''

1.2 參考實例

# 從列表中提取首字母小於c的元素,並以全體大寫的形式存儲在另一個列表中
elements = ['Omega', 'mu', 'alpha', 'beta', 'pi', 'sigma']
temp = [element.upper() for element in elements if element[0'] < 'c']
for i in temp:
    print(i)
'''
運行結果:
OMEGA
ALPHA
BETA
'''

# 計算1-30內可以被3整除的整數
mylist = [i for i in range(1, 31) if i % 3 == 0]
print(i)
'''
運行結果:
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
'''

# 創建列表[(0,1),(1,2),(2,3),(3,4),(4,5),(5,6)]
res = [(i, i+1) for i in range(0, 6)]
print(res)
'''
運行結果:''
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
'''

# 應用列表推導式,去除列表中成績小於80的字典
dict_list = [{"科目": "高等數學", "成績": 96},
             {"科目": "大學物理", "成績": 90},
             {"科目": "線性代數", "成績": 91},
             {"科目": "大學英語", "成績": 75},
             {"科目": "分析化學", "成績": 81},
             {"科目": "有機化學", "成績": 76}]
res = [d for d in dict_list if d["成績"] >= 80]
print(res)
'''
運行結果:
[{'科目': '高等數學', '成績': 96},
 {'科目': '大學物理', '成績': 90},
 {'科目': '線性代數', '成績': 91},
 {'科目': '分析化學', '成績': 81}]
'''



2 字典推導式

2.1 基本格式

{鍵表達式:值表達式 for 變數 in 某表}
或
{鍵表達式:值表達式 for 變數 in 某表 if 條件}

2.2 參考實例

# 通過字典推導式,顛倒字典的鍵名和值
dict_list = {"科目": "高等數學", "成績": 96}
res = {v:k for k,v in dict_list.items()}
print(res)
'''
運行結果:
{'高等數學': '科目', 96: '成績'}
'''

# 使用字元串及其長度創建字典
mylist = ['MySQL', 'Python', 'C++', 'Java', 'HTML', 'CSS']
mydict = {k: len(k) for k in mylist}
print(mydict)
'''
運行結果:
{'MySQL': 5, 'Python': 6, 'C++': 3, 'Java': 4, 'HTML': 4, 'CSS': 3}
'''

# 生成一個包含5個隨機數的字典
import random
res = {k: random.randint(10, 100) for k in range(1, 7)}
print(res)
'''
運行結果:
{1: 39, 2: 60, 3: 40, 4: 44, 5: 42, 6: 96}
'''

# 將兩個長度相同的列表合併成字典
course = ['Python', 'MySQL', 'Java', 'Javascript', 'HTML']
score = [99, 89, 80, 60, 60]
course_score = {k: v for k, v in zip(course, score)}
print(course_score)
'''
運行結果:
{'Python': 99, 'MySQL': 89, 'Java': 80, 'Javascript': 60, 'HTML': 60}
'''



3 集合推導式

3.1 基本格式

{表達式 for 項目 in 序列}
或
{表達式 for 項目 in 序列 if 條件}

3.2 參考實例

# 提取是Python的字母並存儲
res = {v for v in 'pdyftaahdofgng' if v in 'python'}
print(res)
'''
運行結果:
{'o', 'y', 'h', 't', 'p', 'n'}
'''

# 獲取字元串的長度,並去重
course = ['Python', 'MySQL', 'Java', 'Javascript', 'HTML']
res = {len(item) for item in course}
print(res)
'''
運行結果:
{10, 4, 5, 6}
'''

# 計算數字3,4,5的立方數
res = {v**3 for v in range(3, 6)}
print(res)
'''
運行結果:
{64, 27, 125}
'''



4 元組推導式

4.1 基本格式

'''
元組推導式返回生成器對象
可以使用函數tuple()直接將生成器對象轉換成元組
'''

(表達式 for 項目 in 序列)
或
(表達式 for 項目 in 序列 if 條件)

4.2 參考實例

# 計算數字3,4,5的立方數
res = (v**3 for v in range(3, 6))
print(tuple(res))
'''
運行結果:
(27, 64, 125)
'''

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡只討論作反向代理時,當上游服務發生如介面超時、返回指定狀態碼等狀況時而導致nginx超時重試。 這裡使用的nginx版本為1.16.1,可通過nginx -V查看版本。 超時重試主要通過配置ngx_http_upstream_module和ngx_http_proxy_module模塊中欄位實現 ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 今天我們要採集的網站呢,它是一款國民級短視頻App。 在它那裡,瞭解真實的世界,認識有趣的人,也可以記錄真實而有趣的自己。 🛫 現在,話不多說,讓我們開始叭 ⛱ 本篇代碼提供者:青燈教育-巳月 知識點: 動態數據抓包 requests發送請求 json ...
  • 背景 每次通過 docker build 'xxx' 的時候,總是會去maven鏡像下載一大堆Jar包,平均每次build都要在3分鐘左右,效率非常低下,於是查閱了各種辦法試圖讓第一次構建的時候才下載jar包,後面的構建都能復用,類似於本地開發代碼會指定maven倉庫一樣 實現方案 使用 -Dmav ...
  • Day02 第二天主要瞭解的內容為軟體研發的流程,如何使用dos命令框去編譯和運行java程式,以及編寫第一個java程式(HelloWorld) 瞭解編碼格式,Java中的代碼註釋,java如何輸出內容,java中的數據類型以及數據類型的轉換 標識符和關鍵字以及保留字 軟體研發流程 需求調研 需求 ...
  • Intro 對於同樣的數值計算任務,使用numpy比直接編寫python代碼實現 優點: 代碼更簡潔: numpy直接以數組、矩陣為粒度計算並且支持大量的數學函數,而python需要用for迴圈從底層實現; 性能更高效: numpy的數組存儲效率和輸入輸出計算性能,比python使用list好很多, ...
  • 一、 序言 今天用Python來試試,對一個文件裡面的英文單詞數量進行快速統計,告別傳統計數方式。 目標文件 我也不知道多少個,瞎複製的~ 二、涉及知識點 文件讀寫 基礎語法 字元串分割 三、代碼實踐 首先我們創建一個Python文件 導入我們需要用到的模塊 import platform # 我給 ...
  • 前言 嗨嘍~大家好呀,這裡是魔王吶 在前一章:讓我們用python來採集數據看看找工作都要會什麼吧~ 我們講瞭如何採集zhaopin網站數據,現在~ 我們來把數據可視化,更好的查看在自己領域最需的技術是什麼~ 下麵,我們直接上代碼~ 代碼提供者:青燈教育-自游老師 代碼 import pandas ...
  • 1、文件Auto_update_data,需要處理的映射基礎數據 #定義需要導入的映射數據 #以字典進行定義 [公司類目id : 平臺類目id] #d = {key1 : value1, key2 : value2, key3 : value3 } ap_category_relation_data ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...