python之collections模块

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36890572/article/details/82777688

collections是Python内置的集合模块,提供许多集合类,完成基本的集合操作;

1.namedtuple

作用:named:命名的,tuple:Python基本数据结构,元组,是不可变集合;

即创建一个自定义的tuple对象,并规定其个数;可以用属性完成属性引用(等价于面向对象中对象的属性)

# 1.namedtuple
point = collections.namedtuple('Point',['x','y'])  # 定义一个二维的坐标
p = point(11,22)  # 类似于构造方法赋值
print(p.x+p.y)  # 33
Cicle = collections.namedtuple('Circle',['x','y','z'])  # 定义一个三维坐标
Cicle.x = 1
Cicle.y = 2
Cicle.z = 3
print(Cicle.x+Cicle.y+Cicle.z)  # 6

2.deque:

python中的list插入和删除数据比较慢,为高效的实现插入和删除,构造双向列表,适用于队列和栈(即此时二者都是双向的,都可以在头尾进行插入和删除)

queue = collections.deque()
queue.append('123')  # deque(['123']),123的位置相当于头(如果是栈的话就是栈顶)
queue.appendleft('456')  # deque(['456', '123']),等价于从尾插入数据
queue.appendleft('789')  # deque(['789', '456', '123'])

queue.pop()  # deque(['789', '456']),从头删除数据
queue.popleft()  # deque(['456'])
print(queue)

3.defaultdict

在使用dict结构时,当key不存在时,会显示异常;而defaultdict结构中设置默认值,如果不存在,返回默认值;

# 3.defaultdict
dict = {"a" : 65, "b" : 66}
print('a对应的值:{}'.format(dict['a']))
print('c对应的值:{}'.format(dict['c']))

dict1 = collections.defaultdict(lambda:0)  # 声明一个值为0的字典
dict1['a'] = 65  # 覆盖一个位置,存储为'a'
print('a对应的值:{}'.format(dict1['a']))  # a对应的值:65
print('c对应的值:{}'.format(dict1['c']))  # c对应的值:0

结果分别为:

扫描二维码关注公众号,回复: 3525612 查看本文章

4.OrderedDict

使用dict时,key是无序的,orderedDict提供排序的dict(可以自定义排序的规则函数);

dict = collections.OrderedDict()
dict = {'a':2,'b':4,'c':3}
dict = collections.OrderedDict(sorted(dict.items(),key=lambda x:x[1],reverse=True)) # 根据字典中的值倒序排列
for k,v in dict.items():
    print(k,v)
'''
b 4
c 3
a 2
'''

5.Counter

统计字符出现的次数

# 5.Counter
word_list = ['programming','program','english','program']
count = collections.Counter(word_list) # 统计每个单词出现的次数
print(count)
count1 = collections.Counter()
word = 'programming'
for i in word:
    count1[i] = count1[i]+1
print(count1)

'''
Counter({'program': 2, 'programming': 1, 'english': 1})
Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1})
'''

猜你喜欢

转载自blog.csdn.net/qq_36890572/article/details/82777688