一道入群验证的Python题
2gua
☑编程 ☑读书 ☑美食
中午浏览知乎帖子,看到一个帖子在吵架(吵架是知乎的日常吗?),然后回复里不知咋地提到了一个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):
def go(lst):
m = {}
for v in lst:
m[fn(v)].append(v) if m.get(fn(v)) else m.update({fn(v): [v]})
return m
return go
grpby = groupBy(lambda x: x%2 is 1)
grpby([1, 2, 3])
再后面想想看可以用dict.setdefault()嘛:
def groupBy(fn):
def go(lst):
m = {}
for v in lst:
m.setdefault(fn(v), []).append(v)
return m
return go
grpby = groupBy(lambda x: x%2 is 1)
grpby([1, 2, 3])
再后面还有collections.defaultdict呢,collections.defaultdict的效率也比dict.setdefault()快一些哟:
from collections import defaultdict
def groupBy(fn):
def go(lst):
m = defaultdict(list)
for v in lst:
m[fn(v)].append(v)
return dict(m)
return go
grpby = groupBy(lambda x: x%2 is 1)
grpby([1, 2, 3])
可能还有更好的方式?
然后谈谈感想哈。
为嘛知乎上这么多一言不合就掀桌骂娘哪?哪个语言好、哪个语言不好,你自己觉得好不好就是了,管人家观点跟你一样不一样干嘛呢?呐,就算是要发表观点、要反驳观点,也不要讲阴损的话、骂人的话呀!今天回答了一个问题“为什么和BAT相比,网易的技术实力显得捉襟见肘?”,然后居然有人说“网易给你多少钱”?这特么蛋筒了吧?
呐,写程序呢,最重要是自己沉浸其中,心情愉悦轻松。你鄙视我、我鄙视你有必要吗?说实话编程语言又不是你姥姥姥爷,鸡冻个嘛球球呐?!
很多莫名其妙的人、很多莫名其妙的事儿......配上一幅“怒目金刚”的图!
编辑于 2017-09-26 16:21