【Python Cookbook】S01E13 篩選序列中的元素

目錄

  • 問題
  • 解決方案
  • 討論

問題

序列中包含一些數據,我們需要提取出其中的值或根據某些標準對序列做刪減。

解決方案

要篩選序列中的元素,通常最簡單的辦法是通過 列表推導式,例如:

mylist = [1, 4, -5, 10, -7, 2, 3, -1]print([n for n in mylist if n > 0])
print([m for m in mylist if m <= 0])

但是列表推導式存在著一些缺點,比如相對可讀性差,比如其會一次性生成整個列表,在生成非常大的列表時,會導致消耗大量內存。

相比之下,生成器表達式 可以更加有效地使用內存,因為其會逐個產生元素而不是一次性生成整個列表。

pos = (n for n in mylist if n > 0)
print(pos)
for x in pos:print(x)

有時候,如果篩選條件過于復雜,就不宜使用列表推導式以及生成器表達式。這時,我們可以選擇將篩選邏輯代碼放在單獨的函數中,然后使用內建的 filter() 函數處理。

values = ['1', '2', '-3', '-', '4', 'N/A', '5']def is_int(val):try:x = int(val)return Trueexcept ValueError:return Falseisvals = list(filter(is_int, values))
print(isvals)

filter() 創建了一個迭代器,而我們想要篩選得到列表中所有整數,且以列表的形式展示,所以加上 list()

討論

列表推導式以及生成器表達式通常是用來篩選數據的最簡單和最直接的方式。其功能強大,具備同時對數據進行轉換的能力:

mylist = [1, 4, -5, 10, -7, 2, 3, -1]import math
print([math.sqrt(n) for n in mylist if n > 0])

此外,列表推導式以及生成器表達式也可以實現同時對不滿足條件的字段做標注,比如標注出不滿足 >=0 的條件的值,其余值取平方根:

mylist = [1, 4, -5, 16, -7, -9, 25, 36]import math
print([math.sqrt(n) if n > 0 else -1 for n in mylist])

結果:

[1.0, 2.0, -1, 4.0, -1, -1, 5.0, 6.0]

此外,除了列表推導式以及生成器表達式,python 還提供一種篩選工具:itertools.compress(),其接受一個可迭代對象以及一個布爾選擇器序列作為輸入。輸出時,會給出所有在相應的布爾選擇器中為 True 的可迭代對象元素。

address = ['5412 N CLARK','5149 N CLARK','5800 E 58TH','2122 N CLARK','5645 N RAVESWOOD','1060 W ADDISON','4901 N BROADWAY','1039 W GRANVILLE'
]counts = [0, 3, 10, 4, 1, 7, 6, 1]from itertools import compress
more5 = [n > 5 for n in counts]
print(list(compress(address, more5)))
['5800 E 58TH', '1060 W ADDISON', '4901 N BROADWAY']

filter() 函數一樣,compress() 同樣會返回一個迭代器,我們需要通過 list() 將其結果轉換為列表。

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

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

相關文章

JAVAEE之文件IO_數據流概念,字節流:InputStream、OutputStream,字符流:reader、writer,及實例代碼

什么是數據流 顧名思義&#xff0c;I 表示input&#xff0c;O 表示output&#xff0c;也就是輸入輸出流&#xff0c;主要是在程序與文件之間&#xff0c;用于傳輸數據的通道。既然要傳輸數據&#xff0c;那么我們需要理解文件和程序之間哪種方向的傳輸是輸入流&#xff0c;哪種…

SD-WAN供應商的類型及選擇指南

在企業加速數字化轉型的背景下&#xff0c;SD-WAN技術成為優化網絡性能和提升連接效率的重要方案&#xff0c;受到了廣泛關注。本文將介紹當前主要的SD-WAN供應商類型及其特點&#xff0c;并提供企業選擇合適供應商的建議。 目前&#xff0c;市場上的SD-WAN供應商主要分為兩類&…

操作系統(3) 處理機調度

目錄 一、處理機調度概述 1.基本準則 &#xff08;1&#xff09;CPU利用率 &#xff08;2&#xff09;系統吞吐量 &#xff08;3&#xff09;周轉時間 &#xff08;4&#xff09;等待時間 &#xff08;5&#xff09;響應時間 2.進程調度方式 &#xff08;1&#xff0…

現代密碼學-數字簽名

從消息認證碼到數字簽名 前面講到&#xff0c;消息認證碼無法防止否認&#xff0c;A,B之間共享密鑰計算出MAC,A,B都能計算出MAC,對于第三方C來說&#xff0c;他無法證明這個MAC是A計算的還是B計算的。 通過數字簽名解決問題。 A,B各自使用不同的密鑰-公鑰密碼&#xff0c;A用…

LeetCode刷題之HOT100之組合總和

2024/6/3 周一&#xff0c;工作日的第一天。昨晚夢到被導師說去實驗室不積極哈哈哈&#xff0c;風扇開到二級&#xff0c;早上被吹醒。買的書馬上快要到了。上午剛來準備刷題&#xff0c;結果去搞了一下數據庫sql&#xff0c;做的差不多了&#xff0c;還差點格式轉換就差不多出…

springboot打包筆記

文章目錄 多配置文件application.yml本地啟動參數替換profiles&#xff0c;還是要復制文件 項目有各種環境&#xff0c;例如&#xff1a;local&#xff0c;uat&#xff0c;prd等。 各種打包方式一定要熟練掌握。 做此筆記是因為做了那么多項目&#xff0c;也打了很多包&#xf…

QT中如何對引入的第三方庫進行翻譯

1、背景 在我們的程序中,可能會加載其他人寫的模塊,,該模塊是以庫的形式提供的,那么我們程序翻譯時,如何來對引入的第三方庫進行翻譯??? 2、方案 首先,第三方庫會有自己的翻譯文件,并且一般要給我們提供設置翻譯的接口, 例如下:第三方庫給我們暴露一個接口,我們…

軍用電源性能測試有哪些測試項目?需要遵循什么標準?

為了確保軍用電源在極端條件下能夠正常工作&#xff0c;必須對其進行一系列嚴格的性能測試。這些測試不僅包括效率、電壓調整率和負載調整率等基本參數的測試&#xff0c;還包括動態響應能力、絕緣電阻、耐壓測試、溫度系數以及高低溫循環等綜合性能的評估。 測試項目 效率 電壓…

spring 優雅替換bean

方案一&#xff1a;使用 Primary/Qualifier 注解&#xff08;優選&#xff09; 如果有多個相同類型的 Bean 存在&#xff0c;可以將想要優先使用的 Bean 加上 Primary 注解。 Qualifier和Primary注解的區別&#xff1a;Primary注解用于標記具有相同類型的多個實例中的主要實例…

MySQL -- 連接查詢

MySQL使用連接查詢&#xff08;JOIN&#xff09;是為了從多個相關表中獲取數據。連接查詢是一種強大且常用的操作&#xff0c;可以根據某些條件將兩張或多張表中的數據組合在一起&#xff0c;返回一個聯合結果集。 1.為什么使用連接查詢 數據規范化&#xff1a; 數據庫設計時通…

站點被篡改快照被劫持解決服務方法教程_一招制敵

站點被篡改快照被劫持解決服務方法教程_一招制敵 被篡改表現形式&#xff1a; 站點打不開或跳轉到別的網站。 攻擊者目的&#xff1a; 報復、勒索、賣防御產品&#xff08;如DDOS防御產品&#xff09;。 攻擊成本&#xff1a; 工具&#xff08;如VPN購買&#xff09;成本、人…

智能工廠生產設備實時監控技術的UI設計

智能工廠生產設備實時監控技術的UI設計

Flutter的Dart語法入門

文章目錄 前言1. 類型聲明2. 數據類型2.1 基本數據類型常量 2.2 String2.3 集合2.4 unicode 3. Dart函數特征3.1 可變參數列表和默認入參3.2 匿名函數3.3 typedef 4. Dart面向對象4.1 構造函數4.2 訪問權限4.3 類的繼承 參考資料附錄 前言 每個語言都有控制流語句就不寫測試代…

Go 語言的控制結構:條件與循環

Go 語言提供了豐富的控制結構&#xff0c;使得開發者可以編寫出具有復雜邏輯的程序。這些控制結構包括用于條件分支的 if-else 和 switch 語句&#xff0c;循環控制的 for 語句&#xff0c;以及用于控制循環執行流的 break 和 continue 關鍵字。此外&#xff0c;Go 語言還支持 …

約瑟夫游戲(編號+密碼)

編號為1、2、3、...、N的N個人按順時針方向圍坐一圈&#xff0c;每人持有一個密碼&#xff08;正整數&#xff09;。從指定編號為1的人開始&#xff0c;他的密碼為M的初始值&#xff0c;按順時針方向從1號自己開始順序報數&#xff0c;報到指定數M時停止報數&#xff0c;報M的人…

i18n-demo

一、demo 1、資源文件準備 resources下放各個語言文件&#xff0c;直接放resources下都行。我新建一個文件夾&#xff0c;

房地產vr全景展示交互視頻讓購房者更有參與感

在當今房地產市場中&#xff0c;購房者的需求日益多樣化和個性化。為滿足這一趨勢&#xff0c;我們創新性地將VR虛擬現實技術應用于樓盤宣傳&#xff0c;為購房者帶來前所未有的沉浸式購房體驗。 一、地理位置全景展示 通過實景拍攝與VR技術的結合&#xff0c;我們為購房者呈現…

day26-單元測試

1. 單元測試Junit 1.1 什么是單元測試&#xff1f;&#xff08;掌握&#xff09; 1.2 Junit的特點&#xff1f;&#xff08;掌握&#xff09; 1.3 基本用法&#xff1a;&#xff08;掌握&#xff09; 實際開發中單元測試的使用方式&#xff08;掌握&#xff09; public class …

C語言,排序

前言 排序&#xff0c;可以說是數據結構中必不可缺的一環。我們創造數據存儲它&#xff0c;要想知道數據之間的聯系&#xff0c;比較是必不可少的。不然&#xff0c;費勁心思得來的數據若是不能有更多的意義&#xff0c;那么拿到了又有什么用&#xff1f; 排序是計算機內經常進…

風險投資公司正在幫助小投資者購買Anthropic、OpenAI等熱門公司的股票

近年來&#xff0c;風險投資公司對于人工智能&#xff08;AI&#xff09;領域的公司&#xff0c;如Anthropic、Groq、OpenAI等&#xff0c;表現出了極高的投資熱情。這些公司因為它們在AI技術方面的創新而備受矚目。但是&#xff0c;對于很多小投資者來說&#xff0c;由于資金有…