Python进阶篇:10 内置模块collections/itertools

1、collections模块

from collections import namedtuple,deque,defaultdict,OrderedDict,Counter
'''
collections是python内置的集合模块,提供了许多有用的集合类:
(1)namedtuple
(2)deque
 (3)defaultdict
 (4)OrderDict
 (5)Counter

'''
# namedtuple命名元组,本质是一个函数,用它来创建一个自定义的tuple对象,规定tuple元素的个数,并可以用属性而不是索引引用tuple中的元素
p=(1,2)
Point = namedtuple('Point',["x","y"])
point =Point(1,2)
print(point,type(point),isinstance(point,tuple)) # Point(x=1, y=2) <class '__main__.Point'> True
print(point[0],point[1]) #1 2
print(point.x,point.y) #1 2

# deque;使用list存储数据,按照索引访问数据的,但是插入和删除元素会根据元素的个数;
# deque就是为高效实现插入和删除操作的双向列表,适用于队列和栈

q = deque([3,5,7,9])
q.append(0) # 在尾部插入,也就是在右侧插入
q.appendleft(11) #在左侧插入
q.pop() # 从右侧删除一个元素,
q.popleft() # 从左侧取出,取出之后该元素被删除

# defaultdict:在使用dict时,如果引用的key不存在,会抛出KeyError异常。如果希望key不存在时,能得到一个默认的值,就使用defaultdict。
d1 = defaultdict(lambda :"good")
d1['a']=1
d1['c']=3
print(d1['a'],d1['c'],d1['d']) # 1 3 good

# OrderedDict:使用dict时,key是无序的。对dict做迭代时无法保证key的顺序。如果我们需要key有序,就可以使用OrderDict。
# OrderedDict顺序是按照我们键值对插入的顺序
d2 = OrderedDict([("a",11),("d",44),("b",22),("c",33)])
print(d2) # OrderedDict([('a', 11), ('d', 44), ('b', 22), ('c', 33)])
print(d2.get('d')) # 44

#Counter是一个简单的计数器,本质上是一个dict的子类
a = "wzy is a good man"
c = Counter()
print(c) # Counter()
for ch in a:
    c[ch] = c[ch]+1
print(c) # Counter({' ': 5, 'a': 2, 'o': 2, 'w': 1, 'z': 1, 'y': 1, 'i': 1, 's': 1, 'g': 1, 'd': 1, 'm': 1, 'n': 1})


2、itertools模块

import itertools
import time

#无限迭代
# count(start=0, step=1)
c = itertools.count(1)
# for i in c:
#     print(i)
#     time.sleep(0.5)

#cycle(iterable) 参数是个可迭代对象
cy = itertools.cycle("wanzhuang")
# for j in cy:
#     print(j)
#     time.sleep(0.6)

# repeat(object [,times]) 把一个元素无限重复下去,如果提供了第二参数,就可以指定重复次数。
r = itertools.repeat("wanzhuang",times=3)
# for x in r:
#     print(x)
#     time.sleep(0.5)


#有限迭代
#chain(*iterables)把一组对象串联起来,形成一个更大的迭代器。
cha  = itertools.chain("ABC","abc")
# for i in cha:
#     print(i)

#groupby() 把迭代器中相邻的重复元素挑出放在一起
g = itertools.groupby("AABBBBccdedFFF")
for key,value in g:
    print(key,list(value))
    time.sleep(1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值