翼度科技»论坛 编程开发 python 查看内容

用Python统计次数的5种方法

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
一、使用字典 dict 统计

循环遍历出一个可迭代对象的元素,如果字典中没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在则将该元素对应的值加1。
  1. lists = ['a','a','b',1,2,3,1]
  2. count_dist = dict()
  3. for i in lists:
  4.     if i in count_dist:
  5.         count_dist[i] += 1
  6.     else:
  7.         count_dist[i] = 1
  8. print(count_dist)
  9. # {'a': 2, 'b': 1, 1: 2, 2: 1, 3: 1}
复制代码
二、使用 collections.defaultdict 统计

defaultdict(parameter) 接受一个类型参数,例如:int、float、str 等。
传递进来的类型参数,不是用来约束值的类型,更不是约束键的类型,而是当键不存在时,实现一种值的初始化。

  • defaultdict(int) -- 初始化为0
  • defaultdict(float) -- 初始化为0.0
  • defaultdict(str) -- 初始化为''
  1. from collections import defaultdict
  2. lists = ['a','a','b',1,2,3,1]
  3. count_dict = defaultdict(int)
  4. for i in lists:
  5.     count_dict[i] += 1
  6. print(count_dict)
  7. # defaultdict(<class 'int'>, {'a': 2, 'b': 1, 1: 2, 2: 1, 3: 1})
复制代码
三、List count方法

count() 方法用于统计某个元素在列表中出现的次数。
使用语法
  1. # 使用语法
  2. list.count(obj) # 返回次数
复制代码
统计单个对象次数
  1. # 统计单个对象次数
  2. aList = [123, 'abc', 'good', 'abc', 123]
  3. print("Count for 123 :", aList.count(123))
  4. print("Count for abc :", aList.count('abc'))
  5. # Count for 123 : 2
  6. # Count for abc : 2
复制代码
统计List中每一个对象次数
  1. test = ["aaa","bbb","aaa","aaa","ccc","ccc","ddd","aaa","ddd","eee","ddd"]
  2. print(test.count("aaa"))
  3. # 4
  4. print(test.count("bbb"))
  5. # 1
  6. test_result = []
  7. for i in test:
  8.     if i not in test_result:
  9.         test_result.append(i)
  10. print(test_result)
  11. for i in test_result:
  12.     print(f"{i}:{test.count(i)}")
  13. '''
  14. 4
  15. 1
  16. ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
  17. aaa:4
  18. bbb:1
  19. ccc:2
  20. ddd:3
  21. eee:1
  22. '''
复制代码
四、使用集合(set)和列表(list)统计

先用 set 去重,然后循环把每一个元素和对应的次数 list.count(item) 组成元组。
  1. lists = ['a','a','b',1,2,3,1]
  2. count_set = set(lists)
  3. print(count_set) # 集合去重
  4. # {1, 2, 3, 'b', 'a'}
  5. count_list = list()
  6. for i in count_set:
  7.     count_list.append((i, lists.count(i)))
  8. print(count_list)   
  9. # [(1, 2), (2, 1), (3, 1), ('b', 1), ('a', 2)]
复制代码
五、collections.Counter方法

Counter 是一个容器对象,使用 collections 模块中的 Counter 类可以实现 hash 对象的统计。
Counter 是一个无序的容器类型,以字典的键值对形式存储,其中元素作为 key,其计数作为 value。
计数值可以是任意的 Interger(包括0和负数)。
Counter() 对象还有几个可调用的方法:

  • most_common(n) -- TOP n 个出现频率最高的元素
  • elements -- 获取所有的键 通过list转化
  • update -- 增加对象
  • subtrct -- 删除对象
  • 下标访问 a['xx'] --不存在时返回0
  1. import collections
  2. c = collections.Counter('helloworld')
复制代码

  • 直接显示各个元素频次
  1. print(c)
  2. # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 1})
复制代码

  • 使用 most_common 显示最多的n个元素
当多个元素计数值相同时,排列是无确定顺序的。
  1. print(c.most_common(3))
  2. # [('l', 3), ('o', 2), ('h', 1)]
复制代码

  • 使用数组下标获取,类似字典方式
  1. print("The number of 'o':", c['o'])
  2. # The number of 'o': 2
复制代码

  • 统计列表(只要列表中对象都是可以哈希的)
  1. import collections
  2. x = [1,2,3,4,5,6,7,8,1,8,8,8,4,3,5]
  3. c = collections.Counter(x)
  4. print(c)
  5. # Counter({1: 2, 2: 1, 3: 2, 4: 2, 5: 2, 6: 1, 7: 1, 8: 4})
  6. print(c.most_common(3))
  7. # [(8, 4), (1, 2), (3, 2)]
  8. dictc = dict(c) # 转换为字典
  9. print(dictc)
  10. # {1: 2, 2: 1, 3: 2, 4: 2, 5: 2, 6: 1, 7: 1, 8: 4}
复制代码
如果列表中有 unhashalbe 对象,例如:可变的列表,是无法统计的。
元组也可以统计。
  1. c = collections.Counter([[1,2], "hello", 123, 0.52])
  2. # TypeError: unhashable type: 'list'
复制代码
得到 Counter 计数器对象之后,还可以在此基础上进行增量更新。

  • elements() -- 返回迭代器
元素排列无确定顺序,个数小于1的元素不被包含。
  1. import collections
  2. c = collections.Counter(a=4,b=2,c=1)
  3. print(c)
  4. # Counter({'a': 4, 'b': 2, 'c': 1})
  5. list(c.elements())
  6. # ['a', 'a', 'a', 'a', 'b', 'b', 'c']
复制代码

  • subtract函数 -- 减去元素
  1. import collections
  2. c = collections.Counter(["a","b","c","a"])
  3. print(c)
  4. # Counter({'a': 2, 'b': 1, 'c': 1})
  5. print(list(c.elements())) # 展开
  6. # ['a', 'a', 'b', 'c']
  7. # 减少元素
  8. c.subtract(["a","b"])
  9. print(c)
  10. # Counter({'a': 1, 'c': 1, 'b': 0})
  11. print(list(c.elements()))
  12. # ['a', 'c']
复制代码

  • update函数 -- 增加元素
在进行增量计数时候,update函数非常有用。
  1. import collections
  2. c = collections.Counter(["a","b","c","a"])
  3. print(c)
  4. # Counter({'a': 2, 'b': 1, 'c': 1})
  5. print(list(c.elements())) # 展开
  6. # ['a', 'a', 'b', 'c']
  7. #学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078
  8. c.update(["a","d"])
  9. print(c)
  10. # Counter({'a': 3, 'b': 1, 'c': 1, 'd': 1})
  11. print(list(c.elements()))
  12. # ['a', 'a', 'a', 'b', 'c', 'd']
复制代码

  • del函数 -- 删除键
当计数值为0时,并不意味着元素被删除,删除元素应当使用del。
  1. import collections
  2. c = collections.Counter('helloworld')print(c)
  3. # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 1})c["d"] = 0print(c)# Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 0})del c["l"]print(c)# Counter({'o': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 0})
复制代码
来源:https://www.cnblogs.com/xxpythonxx/p/18305363
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具