Python 列表(List)中相同值的元素计数(defaultdict和Counter)

Python中,当需要计数列表中各元素出现的次数时,collections 模块中的 Counter 类是一个非常直接且效率高的选择。此外,使用 collections.defaultdict 也是一种可行的方法,尤其是当需要在计数之外进行更多的自定义操作时。本文主要分享一下Python中列表(list)中相同元素计数输出的代码。

示例数组

temp = ['A''B''A''B''A''B']

计数输出数组

['A_1''B_1''A_2''B_2''A_3''B_3']

通过defaultdict计数

defaultdict()dict()的基础上添加了一个missing(key)的方法,在调用一个不存在的key的时候,defaultdict函数会调用“missing”,返回一个int,set,list,dict对应的默认数值,不会出现keyerror的情况。

from collections import defaultdict
L = ['A''B''A''B''A''B']
dd = defaultdict(int)
res = []
for item in L:
    dd[item] += 1
    res.append(f'{item}_{dd[item]}')
print(res)
['A_1''B_1''A_2''B_2''A_3''B_3']

通过Counter计数

Counter(计数器)是对字典的补充,用于追踪值的出现次数。
Counter是一个继承了字典的类(Counter(dict))

>>> from collections import Counter
>>> 
>>> temp = ['A''B''A''B''A''B']
>>> seen = Counter()
>>> 
>>> result = []
>>> for c in temp:
...:    seen.update(c)
...:    result.append('{}_{}'.format(c, seen[c]))
...:    
>>> result
>>> ['A_1''B_1''A_2''B_2''A_3''B_3']
推荐阅读
cjavapy编程之路首页