假如你有这样一个需求,跟踪相同元素出现的次数,你怎样解决这个问题?
思路一: 利用 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 简介:
- 四种初始化
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)
- 递增更新
import collections
c = collections.Counter('aabbc')
c.update('ab')
print(c) # result: Counter({'a': 3, 'b': 3, 'c': 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})
- 删除统计项
import collections
c = collections.Counter('aabbc')
c.pop('a')
print(c) # result: Counter({'b': 2, 'c': 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 群:397234385
- 或者 QQ 扫码入群:
网友评论