You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 line
4.0KB

  1. import collections
  2. import re
  3. from collections import Counter
  4. print(collections.__all__)
  5. """
  6. ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList',
  7. 'UserString', 'Counter', 'OrderedDict', 'ChainMap']
  8. 这个模块实现了特定目标的容器,以提供Python标准内建容器dict , list , set , 和tuple 的替代选择。
  9. deque: 类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
  10. defaultdict: 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值
  11. namedtuple(): 创建命名元组子类的工厂函数,生成可以使用名字来访问元素内容的tuple子类
  12. UserDict: 封装了字典对象,简化了字典子类化
  13. UserList: 封装了列表对象,简化了列表子类化
  14. UserString: 封装了字符串对象,简化了字符串子类化(中文版翻译有误)
  15. Counter: 字典的子类,提供了可哈希对象的计数功能
  16. OrderedDict: 字典的子类,保存了他们被添加的顺序,有序字典
  17. ChainMap: 类似字典(dict)的容器类,将多个映射集合到一个视图里面
  18. """
  19. text = 'remove an existing key one level down remove an existing key one level down'
  20. # \w 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字
  21. words = re.findall(r'\w+', text)
  22. print(Counter(words).most_common(10))
  23. #计算列表中单词的个数
  24. cnt = Counter()
  25. for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
  26. cnt[word] += 1
  27. print(cnt)
  28. # #上述这样计算有点嘛,下面的方法更简单,直接计算就行
  29. L = ['red', 'blue', 'red', 'green', 'blue', 'blue']
  30. print(Counter(L))
  31. # 元素从一个iterable 被计数或从其他的mapping (or counter)初始化:
  32. # 字符串计数
  33. print(Counter('gallahad'))
  34. # 字典计数
  35. print(Counter({'red': 4, 'blue': 2}))
  36. # 是个啥玩意计数
  37. print(Counter(cats=4, dogs=8))
  38. """
  39. 1、elements()
  40. 描述:返回一个迭代器,其中每个元素将重复出现计数值所指定次。 元素会按首次出现的顺序返回。 如果一个元素的计数值小于1,elements() 将会忽略它。
  41. 语法:elements( )
  42. 参数:无
  43. """
  44. c = Counter(a=4, b=2, c=0, d=-2)
  45. print(c)
  46. print(list(c.elements()))
  47. print(sorted(c.elements()))
  48. c = Counter(a=4, b=2, c=0, d=5)
  49. print(list(c.elements()))
  50. """
  51. 2、most_common()
  52. 返回一个列表,其中包含n个最常见的元素及出现次数,按常见程度由高到低排序。
  53. 如果n被省略或为None,most_common() 将返回计数器中的所有元素,
  54. 计数值相等的元素按首次出现的顺序排序,经常用来计算top词频的词语。
  55. """
  56. print(Counter('abracadabra').most_common(3))
  57. print(Counter('abracadabra').most_common(5))
  58. """
  59. 3、subtract()
  60. 从迭代对象或映射对象减去元素。像dict.update() 但是是减去,而不是替换。输入和输出都可以是0或者负数。
  61. """
  62. c = Counter(a=4, b=2, c=0, d=-2)
  63. d = Counter(a=1, b=2, c=3, d=4)
  64. c.subtract(d)
  65. print(c)
  66. #减去一个abcd
  67. str0 = Counter('aabbccdde')
  68. str0.subtract('abcd')
  69. print(str0)
  70. """
  71. 4、字典方法
  72. 通常字典方法都可用于Counter对象,除了有两个方法工作方式与字典并不相同。
  73. fromkeys(iterable)
  74. 这个类方法没有在Counter中实现。
  75. update([iterable-or-mapping])
  76. 从迭代对象计数元素或者从另一个映射对象 (或计数器) 添加。 像 dict.update() 但是是加上,而不是替换。
  77. 另外,迭代对象应该是序列元素,而不是一个 (key, value) 对。
  78. """
  79. c = Counter(a=4, b=2, c=0, d=-2)
  80. print(sum(c.values()))
  81. print(list(c))
  82. print(set(c))
  83. print(dict(c))
  84. print(c.items())
  85. print(+c) # 删除零计数和负计数
  86. c.clear()
  87. print(c)
  88. """
  89. 5、数学操作
  90. 这个功能非常强大,提供了几个数学操作,可以结合 Counter 对象,以生产 multisets (计数器中大于0的元素)。
  91. 加和减,结合计数器,通过加上或者减去元素的相应计数。交集和并集返回相应计数的最小或最大值。
  92. 每种操作都可以接受带符号的计数,但是输出会忽略掉结果为零或者小于零的计数。
  93. """
  94. c = Counter(a=3, b=1)
  95. d = Counter(a=1, b=2)
  96. print(c+d)
  97. print(c - d)
  98. print(c & d)
  99. print(c | d)