• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于python:Python代码阅读第7篇列表分组计数

python 搞代码 4年前 (2022-02-20) 34次浏览 已收录 0个评论
文章目录[隐藏]

本篇浏览的代码实现了应用分组函数对列表进行分组,并计算每组的元素个数的性能。

本篇浏览的代码片段来自于30-seconds-of-python。

count_by

def count_by(arr, fn=lambda x: x):
  key = {}
  for el in map(fn, arr):
    key[el] = 1 if el not in key else key[el] + 1
  return key

# EXAMPLES
from math import floor
count_by([6.1, 4.2, 6.3], floor) # {6: 2, 4: 1}
count_by(['one', 'two', 'three'], len) # {3: 2, 5: 1}

count_by依据给定的函数对列表中的元素进行分组,并返回每组中元素的数量。该应用map()应用给定函数映射给定列表的值。在映射上迭代,并在每次呈现时减少元素数。

该函数应用not in判断目前字典中是否含有指定的key,如果不含有,就将该key退出字典,并将对应的value设置为1;如果含有,就将value1

应用字典推导式

在** Python代码浏览:依据给定的函数对列表中的元素进行分组**中应用了字典推导式,将列表进行了分组。这里也能够应用同样的形式,在分组之后间接获取列表长度。不过这种写法遍历了两次列表,会使程序效率变低。

def count_by(lst, fn):
  return {key : len([el for el in lst if fn(el) == key]) for key in map(fn, lst)}

应用collections.defaultdict简化代码

class collections.defaultdict([default_factory[, ...]])

collections.defaultdict蕴含一个default_factory属性,能够用来疾速结构指定款式的字典。

当应用int作为default_factory,能够使defaultdict用于计数。因而能够间接应用它来简化代码。相比字典推导式的办法,只须要对列表进行一次循环即可。

 from collections import defaultdict

def count_by(lst, fn):
  d = defaultdict(int)
  for el in lst:
    d[fn(el)] += 1
  return d

当应用 list 作为 default_factory时,很轻松地将(键-值对组成的)序列转换为(键-列表组成的)字典。因而咱们也能够据此改写** Python代码浏览:依据给定的函数对列表中的元素进行分组**中的实现形式,提高效率。

def group_by(lst, fn):
  d = defaultdict(list)
  for el in lst:
    d[fn(el)].append(el)
  return d

# EXAMPLES
from math import floor
group_by([6.1, 4.2, 6.3], floor) # {4: [4.2], 6: [6.1, 6.3]}
group_by(['one', 'two', 'three'], len) # {3: ['one', 'two'], 5: ['three']}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python:Python代码阅读第7篇列表分组计数

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址