映照(map)是更具一般性的数据类型,细致到Python中就是字典。(引荐进修:Python视频教程)
在运用字典的同时我们肯定会有一个疑问,它是如何经由过程键去映照到值的呢,它怎样晓得这个键的值是谁?
因而我们有了一个如许的主意:
运用列表来存储一项一项的键值对象,寻觅的时刻就遍历一遍列表,找到当键是你所要找的键时,掏出该对象中的值value。
这个主意很简单,我们可以很快的完成一下:
这里先引见一些相干的笼统基类,Mapping与MutableMapping,它们在collections模块中,供我们完成自定义的map类。Mapping包括dict中的一切稳定要领,MutableMapping扩大包括了一切可变要领,但它们两个都不包括那五大中心特别要领:getitem、setitem、delitem、len、iter。也就是说我们的目的就是完成这五大中心要领使该数据结构可以运用。
from collections import MutableMapping class MyMap(MutableMapping): class item(): def __init__(self,key,value): self.key = key self.value = value def __eq__(self, other): return self.key == other.key def __ne__(self, other): return self.key != other.key def __init__(self): self.table = [] def __getitem__(self, item): for i in self.table: if i.key == item: return i.value raise KeyError('Key Error: '+ repr(item)) def __setitem__(self, key, value): for i in self.table: if i.key == key: i.value = value return self.table.append(self.item(key,value)) def __delitem__(self, key): for n,i in enumerate(self.table): if i.key == key: self.pop(n) return raise KeyError('Key Error: '+ repr(key)) def __len__(self): return len(self.table) def __iter__(self): for i in self.table: yield i.key
上面这个方法很简单,然则却不是很有效力,我们每次都须要遍历一遍列表才找到该键的索引,所以时候庞杂的为O(n)。
更多Python相干技术文章,请接见Python教程栏目举行进修!
以上就是python经由过程什么完成映照的细致内容,更多请关注ki4网别的相干文章!