python内浅析置模块集合

  

集合是Python内建的一个集合模块,提供了许多有用的集合类。

  

  

python提供了很多非常好用的基本类型,比如不可变类型元组,我们可以轻松地用它来表示一个二元向量。

  

<代码>祝辞祝辞祝辞v=(2、3)

  

我们发现,虽然(2、3)表示出了一个向量的两个坐标,但是,如果没有额外说明,又很难直接看出这个元组是用来表示一个坐标的。

  

为此定义一个类又小题大做了,这时,namedtuple就派上用场了。

        在在在从进口namedtuple集合   在在在向量=namedtuple(“向量”,[' x ', ' y '])   在在在v=向量(2、3)   在在在v.x   2   在在在v.y   3      

namedtuple是一个函数,它用来创建一个自定义的元组对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用元组的某个元素。

  

这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备元组的不变性,又可以根据属性来引用,使用十分方便。

  

我们可以验证创建的向量对象的类型。

        在在在类型(v)   & lt;类“__main__.Vector”比;   在在在isinstance (v,向量)   真正的   在在在isinstance (v,元组)   真正的      

类似的,如果要用坐标和半径表示一个圆,也可以用namedtuple定义:

        在在在圆=namedtuple(“圆”,[' x ', ' y ', ' r '])   # namedtuple(“名称”,(“属性列表'])      

  

在数据结构中,我们知道队列和堆栈是两个非常重要的数据类型,一个先进先出,一个后进先出。在python中,使用列表存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为列表是线性存储,数据量大的时候,插入和删除效率很低。

  

双端队列是为了高效实现插入和删除操作的双向链表结构,非常适合实现队列和堆栈这样的数据结构。

        在在在从集合进口双端队列   在在在描述:=双端队列([1,2,3])   在在在deq.append (4)   在在在描述:   双端队列([1、2、3、4])   在在在deq.appendleft (5)   在在在描述:   双端队列([5,1、2、3、4))   在在在deq.pop ()   4   在在在deq.popleft ()   5   在在在描述:   双端队列([1,2,3])      

双端队列除了实现列表的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。

  

  

使用dict字典类型时,如果引用的关键不存在,就会抛出KeyError。如果希望关键不存在时,返回一个默认值,就可以用defaultdict。

        在在在从进口defaultdict集合   在在在dd=defaultdict(λ:“defaultvalue”)   在在在dd [' key1 ']=' a '   在在在dd (“key1”)   “一个”   在在在dd (“key2”) # key2未定义,返回默认值   “defaultvalue”      

注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。

  

除了在关键不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

  

  

使用dict类型时,关键是无序的。在对dict做迭代时,我们无法确定键的顺序。

  

但是如果想要保持键的顺序,可以用OrderedDict。

        在在在从进口OrderedDict集合   在在在d=dict ([(' a ', 1), (' b ', 2), (“c”, 3)))   在在在d # dict的关键是无序的   {“a”: 1、“c”: 3 b: 2}   在在在od=OrderedDict (((' a ', 1), (' b ', 2), (“c”, 3)))   在在在od # OrderedDict的关键是有序的   OrderedDict ([(' a ', 1), (' b ', 2), (“c”, 3)])      

注意,OrderedDict的关键会按照插入的顺序排列,不是关键本身排序

        在在在od=OrderedDict ()   在在在od [' z ')=1   在在在od [y]=2   在在在od (x)=3   在在在列表(od.keys()) #按照插入的关键的顺序返回   [' z ', ' y ', ' x ']      

OrderedDict可以实现一个FIFO(先进先出)的东西,当容量超出限制时,先删除最早添加的关键。

        从进口OrderedDict集合   类LastUpdatedOrderedDict (OrderedDict):   def __init__(自我,能力):   超级(LastUpdatedOrderedDict自我). __init__ ()   自我。_capacity=能力   def __setitem__(自我、关键值):   如果其他关键自我0 containsKey=1   如果len(自我)——containsKey祝辞=self._capacity:   去年=self.popitem(去年=False)   打印(删除:,)   如果containsKey:   德尔自我(例子)   打印(':'(关键值))   其他:   print(添加:,(键,值))   OrderedDict。__setitem__(自我、关键值)

python内浅析置模块集合