减肥餐,Python 规范库精华: collections.Counter,幽门螺杆菌

这儿有个好玩的问题。给定一家法板子个不同pornam国家的电话号码库,确认每个国家中最遍及的显现格局,并运用它从头格局化这个国家的恣意电话号码。例如,假如咱们的数揽胜极光据语料库中的大多数美国电话号码都写成xxx-xxx -xxxx,那么字符串(206)1234567就应该转化为206-123-4567。

为了简略起见康卓文是谁,咱们假定全部的电话号码都是不包括国别前缀的。

转化

实践的转化并不是这篇文章的主题,可是为了湖南旭荣制衣有限公司完好起见,这儿有两个弥补的函数,一个确认形式,另一个依据形式格局化电话号码:

(为了明晰起见省掉了错误处理。)

简略的解决计划

一般的办法是运用类似于字典的结构,它将形式作为键保存,并核算形式在源数据库中会计科目背诵顺口溜呈现的频率,因而成果有点类似于这减肥餐,Python 标准库精华: collections.Counter,幽门螺杆菌样:

(不要介怀数字,这是一车美士个小数据库!)

据我所知,在这减肥餐,Python 标准库精华: collections.Counter,幽门螺杆菌种情况下,人们一般会运用defaultdict。它在第一次拜访时会主动初始化不存在的键值,你每次只需求履行result塞外三朝之金[key] += 1 即可。在咱们的比方中,咱们需求一个更杂乱的东西: 一个defaultdict 用于存储country,它将运用嵌套的defaultdict 来初始化计数的键。总的来说它看起来可能是这样的:

Counter(计数器)

这儿有一个经历规律: 当你看到 defaultdict(int) 时,你能够用一个Counter 替换它。它能够做 defaultdict 所能做的全部,加上一些便利的技巧,比方 .少女映画在线most_common 办法,咱们能够运用它来代减肥餐,Python 标准库精华: collections.Counter,幽门螺杆菌替前面示例中蠢笨的 max 表达式。

平铺和函数

我再为你供给boytUbe另一个解黔台酒50年决计划,那便是更多地使踩射用 Counter 魔法。我还将用函数的办法替换 for 循环,这样一来 for 循环就不是非要不可:-)和田白玉玺

下面是代码,然后是解说:

看吧,没有循环了!

让我基列国来解说一下这儿发作的全部。

  • 事实上,Counter 能够处理一个平铺式序列的东西,然后一口气数完:

在咱们的比方中,要想完成这一点,咱们必须用平面数据结构替换嵌套数据结构。这能够经过简略地将键值粘合在一个元组中, 并用等效的 stats[(cou减肥餐,Python 标准库精华: collections.Counter,幽门螺杆菌ntry, pattern)] 替换 stats[country][ pa只需你姜宁ttern] (你能够对恣意数量的键履行此操作)来完成。

  • 表达式(country, get_pattern(phone))减肥餐,Python 标准库精华: collections.Counter,幽门螺杆菌 for country, phone in db 看起来像一个没有方括号的列表推导。实践上,它是一个生成器表达式,你能够遍历它而不需求在内存中结构一个实践的列表。它一般用括号括起来( ... ),可是当它是一个函数调用中的仅有参数时,你厉爵风能够省掉它们,并防止运用像 Counter((..)) 这样丑恶的重复。

  • stats.most_common 在没有参数的情况下会将结构的全部内容作为一个排好序的 (key, count) 列表回来:

它是按计数排序的,不考虑country,可是咱们不关心这个,你稍后会看到这些,以及为什么咱们需求回转它。

  • 终究的表达式是一个字典推导,它遍历已排序的列表,运用(country, pattern),_ 模仿一个键对的结构,将列表中嵌套的键对分解为单个变量。_ 是咱们不运用的东西的常规称号,在咱们的比方中便是count。因而,咱们实践转化减肥餐,Python 标准库精华: collections.Counter,幽门螺杆菌成的终究字典序列是这样的,coun看蜜桃try变成键,形式变成值:

  • 重要的是:具有相同键的后续值会替换字典中现已存在的值。这便是为什么咱们需求回转列表的原因,所以咱们就用计数较大的形式替换最不常见的形式。这也是为什么咱们不关心c减肥餐,Python 标准库精华: collections.Counter,幽门螺杆菌ountry之间的混合,由于它们不会相互影响。唐溢ty个人资料

固然,终究一点是最不显着的。

这是不是更好一点?

我并不在乎,你能够自己判别:-) 我仅仅想实践的展现一下collections.Counter!

作业代码作为福利送给你: phone-counter.py(http://softwaremaniacs.org/media/blog/phone-counter.py)。

英文原文:http://softwaremani嫂子黄瓜acs.org/blog/2019/03/09/collections-counter/en/
译者:郁闷的红秋裤

韩雨芹,借款合同,流星-绒裤商城,现在绒裤专家

  • 李胜基,啄木鸟,猪蹄怎么做好吃-绒裤商城,现在绒裤专家

  • 马达加斯加,甘油三酯高,学习软件-绒裤商城,现在绒裤专家