溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

有哪些Python高效代碼小技巧

發(fā)布時間:2021-11-02 15:38:30 來源:億速云 閱讀:165 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“有哪些Python高效代碼小技巧”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“有哪些Python高效代碼小技巧”吧!

把不常用的類別整合成一個

有時你會得到元素分布不均的欄,少有的類別也是僅僅存在而已。通常會希望能將這些類別合并為一個。

df.artists.value_counts()

有哪些Python高效代碼小技巧

要將Coldplay和Weekend合并到一個類別中,因為它們對數(shù)據(jù)集的影響微乎其微。該怎么做?

首先,找到不想改變的元素,比如Eminem,TaylorSwift和BrunoMars:

myList =df.artists.value_counts().nlargest(3).index

使用where()函數(shù)替換其他元素

dfdf_new = df.where(df.artists.isin(myList),other='otherartists') df_new.artists.value_counts()

有哪些Python高效代碼小技巧

這便是按要求修改后的更新列。

查找列表的新元素

給定兩個不同的列表,要求找到一個列表中有但另一個列表中沒有的元素時,參照這兩個列表:

A = [ 1, 3, 5, 7, 9 ] B = [ 4, 5, 6, 7, 8 ]

為了找到列表A中的新元素,我們?nèi)×斜鞟與列表B的集合差:

set(A) - set(B)

有哪些Python高效代碼小技巧

值1、3和9只出現(xiàn)在列表A而不出現(xiàn)在列表B中。

擺脫警告

運行代碼時,經(jīng)常會收到很多警告。沒過多久它就開始使人惱火。例如每當導入朝代時,可能會收到警告(FutureWarning)消息

有哪些Python高效代碼小技巧

可以用下述代碼隱藏所有警告。請確保其寫在代碼頂部。

import warnings warnings.filterwarnings(action='ignore') import keras

這將有助于在整個代碼中隱藏所有警告。

Map() 函數(shù)

map()函數(shù)接受函數(shù)(function)和序列(iterable)兩個參數(shù),返回包含結(jié)果的映射:

map(func,itr)

func 是指接收來自映射傳遞的給定序列元素的函數(shù)。

itr是指可以被映射的序列。

def product(n1,n2):     return n1 *n2 list1 = (1, 2, 3, 4) list2 = (10,20,30,40)result = map(product, list1,list2) list(result)

有哪些Python高效代碼小技巧

開始解碼。

Product函數(shù)接受兩個列表,并反饋兩個列表的乘積。列表1和列表2是充當map函數(shù)序列的兩個列表。map()集product函數(shù)和序列于一身→列表1和列表2,以及反饋兩個列表的乘積作為結(jié)果。

Map + Lambda組合

可以使用lambda表達式修改上述代碼,以替換product函數(shù):

list1 = (1, 2, 3, 4) list2 = (10,20,30,40) result = map(lambda x,y: x * y, list1,list2) print(list(result))

Lambda表達式有助于降低單獨編寫函數(shù)的成本。

啟動、停止和設置

Slice(start:stop[:step])是通常包含部分序列的對象。

  • 如果只提供停止,則從索引0開始生成部分序列直到停止。

  • 如果只提供開始,則在索引開始之后生成部分序列直到最后一個元素。

  • 如果同時提供開始和停止,則在索引開始之后生成部分序列直到停止。

  • 如果起始、停止和步驟三者同時提供,則在索引開始之后生成部分序列直到停止,并增加索引步驟。

x = [ 1, 2, 3, 4, 5, 6, 7, 8 ] x[ 1: 6: 2]

有哪些Python高效代碼小技巧

上面的代碼中,1是開始索引,6是停止索引,2是步驟索引。這意味著從指數(shù)1開始到指數(shù)6停止,步長為2。

還可以使用[::-1]操作翻轉(zhuǎn)列表:

x[::-1]

有哪些Python高效代碼小技巧

沒錯,通過開始、停止和步驟操作,很容易就可以將整個列表進行逆轉(zhuǎn)。

組合Zip和Enumerate

zip和enumerate函數(shù)常用于for循環(huán),兩個一起用就更精彩了。它不僅可以在單個循環(huán)中迭代多個值,而且可以同時獲得索引。

NAME = ['Sid','John','David'] BIRD = ['Eagle','Sparrow','Vulture'] CITY =['Mumbai','US','London']for i,(name,bird,city) inenumerate(zip(NAME,BIRD,CITY)):     print(i,' represents ',name,' ,',bird,' and ',city)

有哪些Python高效代碼小技巧

Zip函數(shù)可以將所有列表合并為一個,以便同時訪問每個列表,而Enumerate函數(shù)協(xié)助獲得索引以及附加到該索引的元素。

隨機抽樣

有時會遇到非常大的數(shù)據(jù)集,因而決定處理數(shù)據(jù)的隨機子集。pandas數(shù)據(jù)框的sample函數(shù)可以實現(xiàn)更多的功能。不妨看看在上面已經(jīng)創(chuàng)建過的歌星數(shù)據(jù)模型。

df.sample(n=10)

這有助于獲取數(shù)據(jù)集里隨機的10行。

df.sample(frac=0.5).reset_index(drop=True)

分解上面的代碼,frac參數(shù)取值在0到1之間,包括1。它占用分配給它的數(shù)據(jù)流的一部分。在上面的代碼片段中指定了0.5,因此它將返回size→0.5*的隨機子集

你能看到前面的reset_index函數(shù)。它有助于適當?shù)刂嘏潘饕?,因為獲取隨機子集時,索引也會被重新排列。

保留內(nèi)存

隨著編程的深入,你將意識到記住內(nèi)存高效代碼的重要性。生成器是返回我們可以遍歷的對象的函數(shù)。這有助于有效利用內(nèi)存,因此它主要用于當在無限長的序列上迭代。

def SampleGenerator(n):     yield n     nn = n+1     yield n     nn = n+1     yield ngen = SampleGenerator(1)

Yield 語句暫停函數(shù),保存其所有狀態(tài),并在以后的連續(xù)調(diào)用中繼續(xù)執(zhí)行。

print(next(gen)) print(next(gen)) print(next(gen))

有哪些Python高效代碼小技巧

如你所見,yield保存了前一個狀態(tài),而每當我們調(diào)用下一個函數(shù)時,它都會繼續(xù)到下一個返回其新輸出的yield。

通過添加在generator函數(shù)內(nèi)無限運行的while循環(huán),可以迭代單個yield。

def updatedGenerator(n):     while(1):         yield n         nn = n + 1 a = updatedGenerator(1)for i in range(5):     print(next(a))

有哪些Python高效代碼小技巧

While語句可以反復迭代相同的yield語句。

救世主Skiprows

重頭戲壓軸出場!要讀取的csv文件過大,以至于內(nèi)存不夠用?Skiprows可以輕松解決。

它可以指定需要在數(shù)據(jù)框中跳過的行數(shù)。

假設有個100萬行的數(shù)據(jù)集,不適合你的內(nèi)存。如果分配skiprows=0.5  million(跳讀50萬行),在讀取數(shù)據(jù)集的時候就會跳過50萬行,這樣就可以輕松地讀取數(shù)據(jù)集的子集。

df = pd.read_csv('artist.csv') df_new = pd.read_csv('artist.csv',skiprows=50)df.shape, df_new.shape

有哪些Python高效代碼小技巧

在上面的代碼片段中,df表示包含112行的數(shù)據(jù)集。在添加了skiprows=50(跳讀50行)之后,它跳過了數(shù)據(jù)集中的50行,從而讀取了62行作為新數(shù)據(jù)集。

到此,相信大家對“有哪些Python高效代碼小技巧”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI