我希望初學Python時就能知道的一些用法

jasper發表於2015-02-03

有時候我反問我自己,怎麼不知道在Python 3中用更簡單的方式做“這樣”的事,當我尋求答案時,隨著時間的推移,我當然發現更簡潔、有效並且bug更少的程式碼。總的來說(不僅僅是這篇文章),“那些”事情總共數量是超過我想象的,但這裡是第一批不明顯的特性,後來我尋求到了更有效的/簡單的/可維護的程式碼。

字典

字典中的keys()和items()

你能在字典的keys和items中做很多有意思的操作,它們類似於集合(set):

太簡潔啦!

在字典中校驗一個key的存在

下面這段程式碼你寫了多少遍了?

這段程式碼其實沒有那麼糟糕,但是為什麼你一直都需要用if語句呢?

這樣就更清晰了,沒有一個多餘而模糊的if語句。

用另一個字典來更新一個字典

這樣看起來還不錯,但是不夠簡明。看看我們是否能做得更好:

更清晰而且更有可讀性了!

從一個字典獲得最大值

如果你想獲取一個字典中的最大值,可能會像這樣直接:

這麼做是有效的,但是如果你需要key,那麼你就需要在value的基礎上再找到key。然而,我們可以用過zip來讓展現更扁平化,並返回一個如下這樣的key-value形式:

同樣地,如果你想從最大到最小地去遍歷一個字典,你可以這麼幹:

在一個list中開啟任意數量的items

我們可以運用*的魔法,獲取任意的items放到list中:

這不是那麼有趣,但是如果我告訴你也可以像下面這樣呢:

看起來很簡潔嘛!

當你想到有一個字串型別的key和一個list的value的字典,而不是遍歷一個字典,然後順序地處理value,你可以使用一個更扁平的展現(list中套list),像下面這樣:

你可以把list解壓成head,*rest,tail等等。

Collections用作計數器

Collections是我在python中最喜歡的庫之一,在python中,除了原始的預設的,如果你還需要其他的資料結構,你就應該看看這個。

我日常基本工作的一部分就是計算大量而又不是很重要的詞。可能有人會說,你可以把這些詞作為一個字典的key,他們分別的值作為value,在我沒有接觸到collections中的Counter時,我可能會同意你的做法(是的,做這麼多介紹就是因為Counter)。

假設你讀的python語言的維基百科,轉化為一個字串,放到一個list中(標記好順序):

到目前為止看起來都不錯,但是如果你想計算這個list中的單詞:

這個沒有那麼糟糕,但是如果你有了Counter,你將會節約下你的時間做更有意義的事情。

很簡潔吧,但是如果我們看看在Counter中包含的可用的方法:

你看到__add__和__sub__方法了嗎,是的,Counter支援加減運算。因此,如果你有很多文字想要去計算單詞,你不必需要Hadoop,你可以運用Counter(作為map)然後把它們加起來(相當於reduce)。這樣你就有構建在Counter上的mapreduce了,你可能以後還會感謝我。

扁平巢狀lists

Collections也有_chain函式,其可被用作扁平巢狀lists

同時開啟兩個檔案

如果你在處理一個檔案(比如一行一行地),而且要把這些處理好的行寫入到另一個檔案中,你可能情不自禁地像下面這麼去寫:

除此之外,你可以在相同的一行裡開啟多個檔案,就像下面這樣:

這樣就更簡潔啦!

從一堆資料中找到星期一

如果你有一個資料想去標準化(比如週一之前或是之後),你也許會像下面這樣:

這就是實現方式。

處理HTML

如果你出於興趣或是利益要爬一個站點,你可能會一直面臨著html標籤。為了去解析各種各樣的html標籤,你可以運用html.parer:

如果你僅僅想避開html:

相關文章