本文是关于Python代码,然后实现列表分组计数。边肖觉得很实用,就分享给大家学习一下。希望你看完这篇文章能有所收获。让我们和边肖一起看看。
1. count_by
defcount_by(arr,fn=lambdax:x):
密钥={}
forlinmap(fn,arr):
key[El]=1 felnotinkyelsekey[El]1
returnkey
#示例
来自mathimportfloor
count_by([6.1,4.2,6.3],floor)#{6:2,4:1}
Count _ by (['一','二','三'],len) # {3:2,533601} Count _ by根据给定的函数对列表中的元素进行分组,并返回每个组中的元素数。使用此映射()将给定列表的值与给定函数进行映射。迭代映射,并增加每次出现的元素数量。
该函数使用not in判断当前字典中是否包含指定的关键字,如果不包含,则将该关键字添加到字典中,并将相应的值设置为1;如果是的话,给这个值加1。
00-1010字典派生的形式为{key _ expr:Value _ expr用于集合if条件中的值}。group_by函数中字典派生的value_expr是一个列表,它是使用列表派生生成的。也就是
{ key _ expr :[xforxincollection 2 if条件2] forvalueincollection1 if条件1}同时我们可以看到,根据group_by代码中的字典推导,可能会计算出具有相同键的项,而根据Pyrhon中字典类型的规则,如果键相同,则只保留最新的键值对。实际上,当键相同时,值也相同。[El for El in lst if fn(El)=key]在派生的for语句中只有一个变量key。
d={ '一' :1,'二' :2,'三' :3,'二' :2}
d
{ '一' :1,'二' :2,'三' :3}
d={ '一' :1,'二' :2,'三' :3,'二' :22}
d
{ '一' :1,'二' :22,'三' :3}
这里,分组后可以直接用同样的方法获取列表长度。但是,这种方法已经遍历了列表两次,这将使程序效率低下。
defcount_by(lst,fn):
返回{ key : len([elf orelinstiffn(El)==key])Forkeyinmap(fn,lst)}
2. 使用字典推导式
类集合。Defaultdict ([default_factory [,])收藏。Defaultdict包含一个default _ factory属性,可以用来快速构造规范。
当int用作default_factory时,defaultdict可以用于计数。所以你可以直接用它来简化代码。与字典推导法相比,只需要循环一次列表。
from collectionimport defaultdict
defcount_by(lst,fn):
d=defaultdict(int)
前级入口:
d[fn(el)]=1
Returnd当使用列表作为default_factory时,很容易将序列(由键-值对组成)转换为字典(由键-列表对组成)。
defgroup_by(lst,fn):
d=defaultdict(列表)
前级入口:
d[fn(el)]。追加(el)
返回d
#示例
来自mathimportfloor
group_by([6.1,4.2,6.3],floor)#{4:[4.2],6:[6.1,6.3]}
Group _ by (['一','二','三'],len) # {3: ['一','二'],5: ['三']}以上都是Python代码,然后实现列表分组计数。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业信息渠道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/84022.html