一道入群驗證的Python題
中午瀏覽知乎帖子,看到一個帖子在吵架(吵架是知乎的日常嗎?),然後回復里不知咋地提到了一個Python群,要入群要做題驗證。題目有點亂,我大概整理下如下:
實現groupBy函數。grpby = groupBy(lambda x: x%2 is 1),grpby([1, 2, 3])的結果為{True: [1, 3], False: [2]}這樣。
想想好久沒翻Python的「牌」了,手痒痒娛樂娛樂。因為在Notepad2里隨便寫的,Tab鍵就直接倆空格了,將就一下咯。
先是寫了一個如下:
def groupBy(fn):n def go(lst):n m = {}n for v in lst:n m[fn(v)].append(v) if m.get(fn(v)) else m.update({fn(v): [v]})n return mn return gonngrpby = groupBy(lambda x: x%2 is 1)ngrpby([1, 2, 3])n
再後面想想看可以用dict.setdefault()嘛:
def groupBy(fn):n def go(lst):n m = {}n for v in lst:n m.setdefault(fn(v), []).append(v)n return mn return gonngrpby = groupBy(lambda x: x%2 is 1)ngrpby([1, 2, 3])n
再後面還有collections.defaultdict呢,collections.defaultdict的效率也比dict.setdefault()快一些喲:
from collections import defaultdictnndef groupBy(fn):n def go(lst):n m = defaultdict(list)n for v in lst:n m[fn(v)].append(v)n return dict(m)n return gonngrpby = groupBy(lambda x: x%2 is 1)ngrpby([1, 2, 3])n
可能還有更好的方式?
然後談談感想哈。
為嘛知乎上這麼多一言不合就掀桌罵娘哪?哪個語言好、哪個語言不好,你自己覺得好不好就是了,管人家觀點跟你一樣不一樣幹嘛呢?吶,就算是要發表觀點、要反駁觀點,也不要講陰損的話、罵人的話呀!今天回答了一個問題「為什麼和BAT相比,網易的技術實力顯得捉襟見肘?」,然後居然有人說「網易給你多少錢」?這特么蛋筒了吧?
吶,寫程序呢,最重要是自己沉浸其中,心情愉悅輕鬆。你鄙視我、我鄙視你有必要嗎?說實話編程語言又不是你姥姥姥爺,雞凍個嘛球球吶?!
很多莫名其妙的人、很多莫名其妙的事兒......配上一幅「怒目金剛」的圖!
推薦閱讀: