這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?
圖源:unsplashpython

Python出圈了,彷佛如今人人都在學Python,朋友圈的課程廣告遍地跑,小學生都看起了編程入門。的確,Python是目前公認的最通用的編程語言,以其易理解易操做的優點攻佔了每個職場人大學生必備技能榜單。編程

學會Python確實能協助你高效工做。但學了是一回事兒,會了是另外一回事兒,不是每一個人學過Python的人都能玩得轉它。如下幾個小技巧,能讓你離玩轉Python更進一步。編程語言

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

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

有時你會獲得元素分佈不均的欄,少有的類別也是僅僅存在而已。一般會但願能將這些類別合併爲一個。ide

df.artists.value_counts()

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

要將Coldplay和Weekend合併到一個類別中,由於它們對數據集的影響微乎其微。該怎麼作?函數

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

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

使用where()函數替換其餘元素編碼

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

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

這即是按要求修改後的更新列。3d

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

查找列表的新元素

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

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

爲了找到列表A中的新元素,咱們取列表A與列表B的集合差:code

set(A) - set(B)

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

值一、3和9只出如今列表A而不出如今列表B中。

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?
圖源:unsplash

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

擺脫警告

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

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

能夠用下述代碼隱藏全部警告。請確保其寫在代碼頂部。

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

這將有助於在整個代碼中隱藏全部警告。

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

Map() 函數

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

map(func,itr)

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

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)

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

開始解碼。

Product函數接受兩個列表,並反饋兩個列表的乘積。列表1和列表2是充當map函數序列的兩個列表。map()集product函數和序列於一身→列表1和列表2,以及反饋兩個列表的乘積做爲結果。

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?
圖源:unsplash

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

Map + Lambda組合

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

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

Lambda表達式有助於下降單獨編寫函數的成本。

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

啓動、中止和設置

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

· 若是隻提供中止,則從索引0開始生成部分序列直到中止。
· 若是隻提供開始,則在索引開始以後生成部分序列直到最後一個元素。
· 若是同時提供開始和中止,則在索引開始以後生成部分序列直到中止。
· 若是起始、中止和步驟三者同時提供,則在索引開始以後生成部分序列直到中止,並增長索引步驟。

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

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

上面的代碼中,1是開始索引,6是中止索引,2是步驟索引。這意味着從指數1開始到指數6中止,步長爲2。

還可使用[::-1]操做翻轉列表:

x[::-1]

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

沒錯,經過開始、中止和步驟操做,很容易就能夠將整個列表進行逆轉。

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

組合Zip和Enumerate

zip和enumerate函數經常使用於for循環,兩個一塊兒用就更精彩了。它不只能夠在單個循環中迭代多個值,並且能夠同時得到索引。

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)

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

Zip函數能夠將全部列表合併爲一個,以便同時訪問每一個列表,而Enumerate函數協助得到索引以及附加到該索引的元素。

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

隨機抽樣

有時會遇到很是大的數據集,於是決定處理數據的隨機子集。pandas數據框的sample函數能夠實現更多的功能。不妨看看在上面已經建立過的歌星數據模型。

df.sample(n=10)

這有助於獲取數據集裏隨機的10行。

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

分解上面的代碼,frac參數取值在0到1之間,包括1。它佔用分配給它的數據流的一部分。在上面的代碼片斷中指定了0.5,所以它將返回size→0.5*的隨機子集

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?
圖源:unsplash

你能看到前面的reset_index函數。它有助於適當地重排索引,由於獲取隨機子集時,索引也會被從新排列。
這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

保留內存

隨着編程的深刻,你將意識到記住內存高效代碼的重要性。生成器是返回咱們能夠遍歷的對象的函數。這有助於有效利用內存,所以它主要用於當在無限長的序列上迭代。

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

Yield 語句暫停函數,保存其全部狀態,並在之後的連續調用中繼續執行。

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

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

如你所見,yield保存了前一個狀態,而每當咱們調用下一個函數時,它都會繼續到下一個返回其新輸出的yield。

經過添加在generator函數內無限運行的while循環,能夠迭代單個yield。

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

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

While語句能夠反覆迭代相同的yield語句。

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

救世主Skiprows

重頭戲壓軸出場!要讀取的csv文件過大,以致於內存不夠用?Skiprows能夠輕鬆解決。

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?
圖源:unsplash

它能夠指定須要在數據框中跳過的行數。

假設有個100萬行的數據集,不適合你的內存。若是分配skiprows=0.5 million(跳讀50萬行),在讀取數據集的時候就會跳過50萬行,這樣就能夠輕鬆地讀取數據集的子集。

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

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

在上面的代碼片斷中,df表示包含112行的數據集。在添加了skiprows=50(跳讀50行)以後,它跳過了數據集中的50行,從而讀取了62行做爲新數據集。

破案啦!編碼效率提高一大截的祕密就在於此。

留言點贊發個朋友圈

咱們一塊兒分享AI學習與發展的乾貨

編譯組:王品1、劉鑑楠
相關連接:
https://towardsdatascience.com/10-interesting-python-tricks-to-knock-your-socks-off-1dd4d8e82101

如轉載,請後臺留言,遵照轉載規範

推薦文章閱讀

ACL2018論文集50篇解讀
EMNLP2017論文集28篇論文解讀
2018年AI三大頂會中國學術成果全連接
ACL2017論文集:34篇解讀乾貨全在這裏
10篇AAAI2017經典論文回顧

長按識別二維碼可添加關注

讀芯君愛你

這些讓人相見恨晚的高效代碼小技巧你聽過嗎?

相關文章
相關標籤/搜索