python編程學(xué)習(xí)使用管道Pipe編寫優(yōu)化代碼
我們知道 map 和 filter 是兩種有效的 Python 方法來處理可迭代對象。
但是,如果你同時使用 map 和 filter,代碼可能看起來很混亂。
如果你可以使用管道那不是更好了?像下面這樣的方式來處理。
Pipe 庫可以做到這一點(diǎn)。
什么是管道?
Pipe 是一個 Python 庫,可讓你在 Python 中使用管道。
管道 (|) 將一種方法的結(jié)果傳遞給另一種方法。
我喜歡 Pipe,因?yàn)樗刮业拇a將多個方法應(yīng)用于 Python 可迭代對象時看起來更簡潔。由于 Pipe 只提供了幾個方法,所以學(xué)習(xí)Pipe也很容易。 在本文中,我將向你展示一些我認(rèn)為最有用的方法。
要安裝Pipe,請輸入:
pip install pipe
Where:可迭代對象中的過濾元素
與 SQL 類似,Pipe 的 where 方法也可用于過濾可迭代對象中的元素。
Select: 將函數(shù)應(yīng)用于可迭代對象
select方法類似于map方法。
select 將方法應(yīng)用于可迭代的每個元素。
在下面的代碼中,我使用 select 將列表中的每個元素乘以 2。
現(xiàn)在,你可能想知道:如果 map 和 filter 具有相同的功能,為什么我們需要 where 和 select 方法?
這是因?yàn)槟憧梢允褂霉艿涝诹硪粋€方法之后插入一個方法。 因此,使用管道消除了嵌套的括號并使代碼更具可讀性。
展開可迭代對象
1、chain方法
使用嵌套的可迭代對象可能會很痛苦。 幸運(yùn)的是,我們可以使用 chain 來鏈接一系列可迭代對象。
盡管應(yīng)用 chain 可以使可迭代對象的嵌套較少,我們?nèi)匀恍枰粋€更強(qiáng)大的工具。 為了處理深度嵌套的列表,我們可以使用 traverse 代替。
2、traverse:遞歸展開可迭代對象
traverse 方法可用于遞歸展開可迭代對象。 你可以使用此方法將深度嵌套的列表轉(zhuǎn)換為平面列表。
讓我們將此方法與 select 方法集成以獲取字典的值并展平列表。
這樣處理是不是很酷?
將列表中的元素分組
有時,使用特定函數(shù)對列表中的元素進(jìn)行分組可能很有用。 這可以通過 groupby 方法輕松完成。
為了看看這個方法是如何工作的,讓我們把一個數(shù)字列表變成一個字典,這個字典根據(jù)數(shù)字是偶數(shù)還是奇數(shù)來分組。
在上面的代碼中,我們使用 groupby 將數(shù)字分組為偶數(shù)組和奇數(shù)組。 應(yīng)用此方法后的輸出如下所示:
[('Even', <itertools._grouper at 0x7fbea8030550>), ('Odd', <itertools._grouper at 0x7fbea80309a0>)]
接下來,我們使用 select 將元組列表轉(zhuǎn)換為字典列表,其鍵是元組中的第一個元素,值是元組中的第二個元素。
[{'Even': [2, 4, 6, 8]}, {'Odd': [1, 3, 5, 7, 9]}]
為了只獲取大于 2 的值,我們可以在 select 方法中添加 where 方法:
dedup 方法刪除列表中的重復(fù)項(xiàng)
這聽起來可能并不有趣,因?yàn)?set 方法可以做同樣的事情。 但是,此方法更靈活,可以讓你獲取唯一元素。
例如,你可以使用此方法獲取一個小于 5 的唯一元素和另一個大于或等于 5 的唯一元素。
現(xiàn)在,讓我們將此方法與 select 結(jié)合起來,從哪里獲取具有重復(fù)鍵和 None 值的字典的值。
在上面的代碼中,我們:
- 刪除具有相同名稱的項(xiàng)目
- 獲取計(jì)數(shù)值
- 只選擇整數(shù)值。
在幾行代碼中,我們可以將多個方法應(yīng)用于可迭代對象,同時仍然可以保持代碼整潔,不是嗎?
結(jié)論
剛剛我們學(xué)習(xí)了如何使用管道來保持代碼簡潔簡潔, 我希望這篇文章能讓你了解到可迭代對象上的復(fù)雜操作其實(shí)只需要一行簡單的代碼。
以上就是python編程學(xué)習(xí)使用管道Pipe編寫優(yōu)雅代碼的詳細(xì)內(nèi)容,更多關(guān)于Python管道Pipe 編寫代碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python利用pandas計(jì)算多個CSV文件數(shù)據(jù)值的實(shí)例
下面小編就為大家分享一篇Python利用pandas計(jì)算多個CSV文件數(shù)據(jù)值的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python可視化Tkinter進(jìn)階grid布局詳情
這篇文章主要介紹了Python可視化Tkinter進(jìn)階grid布局詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07OpenCV簡單標(biāo)準(zhǔn)數(shù)字識別的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于OpenCV簡單標(biāo)準(zhǔn)數(shù)字識別的相關(guān)資料,要通過opencv 進(jìn)行數(shù)字識別離不開訓(xùn)練庫的支持,需要對目標(biāo)圖片進(jìn)行大量的訓(xùn)練,才能做到精準(zhǔn)的識別出目標(biāo)數(shù)字,需要的朋友可以參考下2021-09-09Python實(shí)現(xiàn)的堆排序算法原理與用法實(shí)例分析
這篇文章主要介紹了Python實(shí)現(xiàn)的堆排序算法,簡單描述了堆排序的原理,并結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)堆排序的相關(guān)操作技巧,代碼中備有較為詳細(xì)的注釋便于理解,需要的朋友可以參考下2017-11-11Pandas.DataFrame刪除指定行和列(drop)的實(shí)現(xiàn)
本文主要介紹了Pandas.DataFrame刪除指定行和列(drop)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02