Python 指南

《Python 每日一学》之 Counter

2018-08-14  本文已影响30人  谢烟客

假如你有这样一个需求,跟踪相同元素出现的次数,你怎样解决这个问题?

思路一: 利用 dict 中 key 为一的特性,value 为出现的次数,每次在 dict 中校验 key 是否存在,如果存在 value 值加 1 如果不存在则添加 {key:1}

思路一的代码实现:

# Python Version: 3.6
counter = dict()

def count(ele):
    if ele in counter:
        counter[ele] += 1
    else:
        counter[ele] = 1

if __name__ == '__main__':
    count('a')
    count('a')
    count('b')

    print(counter)     # result: {'a': 2, 'b': 1}

思路二:利用 Python 标准库 collections.Counter 实现

# Python Version: 3.6
import collections

c = collections.Counter('aa')
c.update('abc')

print(c)    # result: Counter({'a': 3, 'b': 1, 'c': 1})

collections.Counter 简介:

  1. 四种初始化
import collections

c = collections.Counter('aabbc')
c1 = collections.Counter(['a','a','b','b','c'])
c2 = collections.Counter({'a':2, 'b':2, 'c':1})
c3 = collections.Counter(a=2,b=2,c=1)
  1. 递增更新
import collections

c = collections.Counter('aabbc')
c.update('ab')
print(c)    # result: Counter({'a': 3, 'b': 3, 'c': 1})
  1. 递减更新
import collections

c = collections.Counter('aabbc')
print(c)    # result: Counter({'a': 2, 'b': 2, 'c': 1})
c.subtract('ab')
print(c)    # result: Counter({'a': 1, 'b': 1, 'c': 1})
  1. 删除统计项
import collections

c = collections.Counter('aabbc')
c.pop('a')
print(c)    # result: Counter({'b': 2, 'c': 1})
  1. 查看统计结果
import collections

c = collections.Counter('aabbc')
print(c.get('a'))    # result: 2
print(c['a'])    # result: 2

tips: 虽然有2种方式,我们还是建议使用 counter['item'] 方式取值,因为默认的统计结果都为整数类型,而采取 counter.get('item') 的方式时,如果 item 不存在返回的 None 类型,容易产生 TypeError ,counter['item'] 如果 item 不存在时结果为 0,与存在时类型相同,处理上更为的简单


qq群.jpg
上一篇 下一篇

猜你喜欢

热点阅读