python高级语法-collections模块下几个新序列

  • 很多乃至绝大多数时候list,set,dict是不错的选择,但是有些特殊情形下我们发现内置的三种序列结构不能方便地满足我们的要求,这是collections模块下的几个新序列就有了用武之地。
  • 这里只介绍基础的用法。

1. namedtuple(命名元组)

这里个人觉得有点像c语言里面的结构体。

创建和使用:

import collections
# 利用namedtuple产生一个类,两个参数 命名的名字,所含成员名字
Point = collections.namedtuple("Point", ['x', 'y'])
# 用产生的类去实例化一个对象
p = Point(1, 2)
print(p.x)

2. deque(双向队列)

这种队列拜托了队列先进先出的一端原则。

创建和使用:

# 用列表来创建一个deque对象
q = collections.deque([0, 1, 2, 3, 4])
print(q)
# 追加的两种方式
q.appendleft("x")
q.append("y")
print(q)

3. defaultdict(默认值字典)

众所周知,一旦我们访问字典中的某个key不存在字典中,那么程序就好崩溃,但是很多时候,我们不愿意为一个字典访问加上try语句,这显得很麻烦,我们希望没有给定值但是访问到的key可以正常有值,默认值字典应运而生。

创建和使用:

# d1是普通字典
d1 = {}
# 给定默认值的函数是一个lambda表达式
fuc1 = lambda: "zc"
d2 = collections.defaultdict(fuc1)
d2["one"] = 1
print(d2["one"])
print(d2["hsjdbj"])

但是我们将最后一句的d2换成d1,程序崩溃了。

4. Counter(计数器)

通过传入可迭代对象创建,计数单元就是这个可迭代对象的最小单元。他会生成字典,key是计数单元,value是计数得到的数值。

创建和使用:

# 通过字符串创建
str1 = "cgukalbcklancl;wea'wec,w"
c = collections.Counter(str1)
print(c)
str1 = ["zc", "nb"]
c = collections.Counter(str1)
print(c)

5. OrderDict(有序字典)

这里指的是元素添加顺序拜托了原本字典无序的规定,只有顺序一致的字典才是相同的。

创建和使用:

# 创建一个字典对象
print("dict:")
d1 = {}
d1["a"] = "A"
d1["b"] = "B"
d1["c"] = "C"
for k, v in d1.items():
    print(k, "---", v)
# 创建一个有序字典对象
print("OrderDict:")
d2 = collections.OrderedDict()
d2["a"] = "A"
d2["b"] = "B"
d2["c"] = "C"
for k, v in d2.items():
    print(k, "---", v)
# 这里创建两个内容hed1和d2分别一样的dict,但是改变了元素添加的书序
d3 = {}
d3["a"] = "A"
d3["c"] = "C"
d3["b"] = "B"
d4 = collections.OrderedDict()
d4["a"] = "A"
d4["c"] = "C"
d4["b"] = "B"
print(d1 == d3)
print(d2 == d4)

从结果看只要内容相同,不论处理顺序,两个字典是相同的;但是,OrderDict来说则完全不同,它记住了元素添加顺序。(不是修改顺序)

你可能感兴趣的:(Python)