有大量数据需要做统计代码量会比较大,可使用Counter类
from collections import Counter
users = ['bobby1','bobby2','bobby1','bobby2','bobby2','bobby3']
users_counter = Counter(users)
print(users_counter )
Counter可以传递任何可迭代对象
users_counter = Counter("asdasdgdfwee")
Counter是dict子类,继承自dict,它返回dict类型统计结果
users_counter.update("asdasdg") # 也可以进行合并统计,使用update方法
它也可以传递另外一个Counter对象
users_counter1 = Counter("asdasdgdfwee")
users_counter2 = Counter("sdf342zz")
users_counter1.update(users_counter2 )
users_counter.most_common(2) # 统计出现次数最多的前n个元素
它的内部是通过_heapq堆数据结构实现的,这个堆是专门解决这个topn问题,性能比自己遍历更高
counter.update()
counter.most_common() 堆实现
from collections import Counter
x = Counter("aaabbcccddd")
print(x, x.most_common(2))
迭代:python中可以用for循环使用取值操作过程.
可迭代对象:可以使用for循环遍历的对象,我们称之为可迭代对象.
迭代器:提供数据和记录位置.
生成器:如果函数中有yield我们称之为生成器
如果在同一时间执行多个任务我们可以使用多进程和多线程,如果你想使用一个线程或进程然后让多个任务一次执行按顺序执行一个线程或者一个进程. 如果你在一个线程内部,想使用让多个任务交替执行,那么可以使用协程
1)在python中以双下滑线开头并且以双下滑线结尾的函数
2)魔法函数可以随意定义某个类的特性,这些方法在进行特定的操作时会自动被调用
"""
Counter()函数接收一个可以迭代的对象,这个对象可以是列表,元组,字典,字符串等,返回一个字典
其子方法:
update(): 追加
most_common(n): 统计出出现次数最多的前n个元素
"""
from collections import Counter
if __name__ == "__main__":
users = ["李四", "张三", "李四", "王五", "张三", "田七"]
user_counter = Counter(users) # 统计
print(user_counter)
str_counter = Counter("ajkdihtdajkgybuatyaytayrtvaunywywghab") # 统计字符串
print(str_counter)
str_counter.update("agafadadaaaaaassdss") # 追加
print(str_counter)
user_counter.update(str_counter) # 追加统计
print(user_counter)
print(str_counter.most_common(4)) # 返回出现次数最多的前4个元素
实例:
from collections import Counter
str_t = "dsjakldjakljdakjdadlkjasdklajkdja"
list_t = ['tom', 'tom1', 'tom2', 'tom1', 'tom1', 'tom']
tuple_t = ('tom', 'tom1', 'tom2', 'tom1', 'tom1', 'tom')
dict_t = {
"tom": "male",
"tom1": "male",
}
print(Counter(str_t))
print(Counter(list_t))
print(Counter(tuple_t))
print(Counter(dict_t.values()))
ls_counter = Counter(list_t)
ls_counter.update(["tom4"])
print(ls_counter)
print(ls_counter.most_common(2))
counter 统计功能
#Counter:传入可迭代对象
from collections import Counter
users = ["bobby1", "bobby2", "bobby3", "bobby1", "bobby2", "bobby2"]
user_counter = Counter(users)
print(user_counter) #打印出dict并按键值大小顺序排列:Counter({"bobby2":3,"bobby1":2,"bobby3":1})
user_counter = Counter("adgdfcdg") #传递字符串,统计每个字符的次数
user_counter.update("djgidg") #传递可迭代对象并且合并
user_counter2 = Counter("djgidg")
user_counter.update(user_counter2) #传递Counter
#top n,堆
user_counter.most_common(2) #统计出现次数最多的前2个元素 -->[('d',4),('s',3)]