Day 11 標準程式庫:你的機車不機車,載我瀏覽世界景色
註:本篇文章同步刊載於iT邦幫忙,為鐵人賽之系列文章。
https://ithelp.ithome.com.tw/articles/10243343
先來解答昨天的問題吧!
- 我們可以使用randint(1, 100),
或者使用int(1 + random() * 100)來取得亂數值。
| |
- 為了要避開,我們可以先生成一個串列,
範圍為1~100並且去除掉avoid_lt的值。
| |
在上一篇我們用了一些匯入的模組及套件以後,
今天我們再花一點時間進一步來介紹Python的標準程式庫!
在Python當中有很多已經做好的函式,只需要匯入就可以使用囉!
在實作一些功能前,有時候不妨先查一下是否有適用的函式可用。
但有一點很重要的要先提到:
請不要造一輛車子以後只拿輪子,這會很沒效率。
為什麼呢?
因為當我們造一輛車子的時候會耗費大量的時間,
但如果我們只是要一個輪子的話,
我們應該去尋找專門製作輪子的方式,而非造車拔輪。
所以讀者在使用函式的時候,都要盡量去留意當前自己的目標是什麼,
避免耗費過多時間讓Python在不必要的部分計算。
首先我們來介紹defaultdict() 。
先前我們介紹過字典,假設我們現在有一個字典名為dic,
當我們使用dic[key]時,如果這個key並不在字典裡,
會發生什麼事情呢?
答案是:會產生錯誤!
| |
為了處理這個問題,我們有幾種方式:
- 每次檢查if key in dic ,存在的話,再做其他的事情。
- 如果我們有一些預設的狀況的話,例如要存放key出現的次數,那可以使用get() 。
get()的第一個參數放入要找的key,第二個位置放入預設的value值,
如果這個key不存在於字典,就使用後面給定的value做為結果;
如果存在的話,當然就用對應到的value。
| |
- defaultdict()
| |
在defaultdict中,當key沒有被指定value時,
就會採用初始化時預設給進去的東西:
寫int代表預設值為0、寫list代表預設為空串列、寫dict表預設為空字典…
以此類推。
省略參數的時候,會被設定為None ,也就是什麼都沒有的意思,
但這麼一來,就又會回到一般字典對於不存在的key會報錯的狀況。
給進去的東西還有其他的用法,有興趣的讀者也可以再深入研究。
接著我們來看看Counter() 。
顧名思義,Counter()基本上就是用來計算什麼東西出現幾次 用的,
它是屬於collections裡面的一部分,
我們直接來看範例:
| |
除了範例提到的基本以外,兩個Counter之間可以做加、減,
結果就是將對應的key出現的次數加總及相減。
(相減時小於等於0的部分會去掉)
使用&和|則會像set一樣取得交集和聯集。
前面包含了dict及defaultdict的部分,
都有一個特點:它不一定 按照原先順序排列。
那麼如果你真的很在意一開始的順序呢?
我們可以使用**OrderedDict()**來處理。
| |
當我們在練習LeetCode寫題目時,
常常會需要使用到stack(堆疊)或queue(佇列)這兩種資料結構,
前者通常使用list即可,後者則一般會使用deque 。
(理論上念做deck,但我都習慣念de-queue)
deque 是一個雙向的序列,
可以從開頭或結尾傳入或取出資料。
我們直接來看範例:
| |
由於從右邊處理才是一般常見狀態,
所以無論是append或pop,
在往左時都會加上一個left,
藉以區分兩者差別。
如果對於資料結構、演算法、LeetCode有興趣的話,
也歡迎看看去年的鐵人賽發文,或者查筆者的Medium系列文章!
以上只不過是Python內建函式庫的冰山一角而已XD
有興趣的讀者,可以再自己找看看有什麼你需要的東西~
那我們來練習一下題目吧!
- 給定兩個字串s跟t,已經知道t的組成,
是將s的字母打亂以後進行重組,再隨機加上一個字母。
請用前面所學,找出被加上的那個字母。
辛苦啦!我們明天見!
工商時間:
抽獎活動還在繼續累積人數(現在好像沒有人想抽XD)
在Python Taiwan的連結第100篇的文章 底下,
公開分享到你的臉書、按讚該篇文章、並留言告訴我說,
「你最喜歡這一整個系列的哪一篇?為什麼?」或
「除了從LeetCode學演算法系列以外,
你還想要看到關於什麼方向的文章?」
超過20則留言的話 (有完成以上步驟的才算),我們就抽一組
「從Leetcode學演算法|進階篇」+「從Leetcode學演算法|面試篇」
課程的免費兌換券進行贈送!
期限嘛…就延長到滿人數吧XDD (不然也沒辦法哈哈)
容筆者工商一下,
「從Leetcode學演算法|進階篇」 開放預購啦!
這次選了40道難度加深的LeetCode題目,
同樣也會細部解說對應的技巧及須要掌握的演算法!
同時這次購買進階篇的話,
額外還加贈**「從Leetcode學演算法|面試篇」** !
當中包含了面試準備須知分享 ,及訪談國內外不同經驗的工程師 ,
讓你不論是想走前端/後端/一般軟工 或者是想找國外的工作 ,
是初學想轉職 還是正在工作 ,都能夠從中得到收穫呦!
有興趣的朋友可以使用下面的早鳥優惠~
「從Leetcode學演算法|進階篇」+「從Leetcode學演算法|面試篇」 :
https://bit.ly/advleetcode
「從Leetcode學演算法」全套(基礎/進階/面試篇)同捆優惠:
https://bit.ly/allleetcode
