集合是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内浅析置模块集合