7.映射和集合类型(射…让人总是浮想)

来源:互联网 发布:英美杂志软件 编辑:程序博客网 时间:2024/05/29 17:45

1、映射类型之一:字典

字典是Python中唯一的映射(Mapping)类型,当然它也属于容器类型(称谓就是多,嘿嘿,不要乱)


2、既然是容器,当然能含有任意个实例对象啦,结构呢就是key value,其实它娘的就是键值对……


3、哈希表-数据结构,牛逼,人类就是牛逼,这样的存储方式也能想到,有个value值存在内存地址的哪呢? 算法随机找个地方存下来,给你个key键, 通过key就能到value,牛逼


4、字典的创建

>>> a = {"name" : "wangyuanwai", 'age' : 16}>>> a{'age': 16, 'name': 'wangyuanwai'}
字典的创建,之前也说过,就是{}括起来,嘿嘿,对{}这就是个字典


还有空字典

>>> b = {}>>> b{}


5、字典的key可以是任意类型的实例对象,一般情况下用字符串多一些,另外value也可以任意类型的实例对象,包括容器类型哦


6、查找value,只需要[key名称],就OK啊

>>> a['name']'wangyuanwai'


7、又到增删改查,第六条已经介绍了


改:

>>> a['name'] = "wang yuan wai is king">>> a{'age': 16, 'name': 'wang yuan wai is king'}


删:要用到函数了……

删除一个元素

>>> a.pop('name')'wang yuan wai is king'
pop函数返回的被删除key的value,有点意思


删除所有元素:查api文档好了


增加:

留的以后介绍吧,呵呵


8、注意:字典不支持加好 +, 不支持重复 操作

>>> a{'age': 16}>>> b = a>>> a{'age': 16}b>>> >>> b{'age': 16}>>> a + bTraceback (most recent call last):  File "<pyshell#75>", line 1, in <module>    a + bTypeError: unsupported operand type(s) for +: 'dict' and 'dict'>>> a * 2Traceback (most recent call last):  File "<pyshell#76>", line 1, in <module>    a * 2TypeError: unsupported operand type(s) for *: 'dict' and 'int'>>> 

9、[],我们之前就用过啦啊,用这个用过key得到value


10、key也可以用in、not in,  存在、不存在

>>> a{'age': 16}>>> 'age' in aTrue
这里是 key可用in、not in啊,千万别理解成value可以用,  如果你用 16 in a,它本身就是去判断key的,你传value纯属打脸啊!

10、一个简便的增加字典元素的方式

>>> a{'age': 16}>>> a['name'] = 'wangdaye'>>> a{'age': 16, 'name': 'wangdaye'}
Python牛x啊,发现没有key ‘name’,直接就给你加到字典里面了,cool啊


11、has_key()函数与in、not in的用法是一样的,嘿嘿

<pre name="code" class="python">>>> dict1{'age': 16, 'name': 'niubi'}>>> dict1.has_key('name')True>>> 'name' in dict1True>>> 


12、字典的key必须是可哈希的,目前已知数字和字符串可以作为key,List和字典类型不可以作为key

13、更新字典

>>> dict1 = {'name' : 'wangyuanwai', 'age' : 16, 'address' : "beijing"}>>> dict1{'age': 16, 'name': 'wangyuanwai', 'address': 'beijing'}>>> dict1['age'] = 30
通过key,直接赋值,哈哈


14、又一次使用字典,作为 print  %的 源数据,话说这样满好用的啊

>>> print "%(name)s is a man, he is %(age)d and in the %(address)s" % dict1wangyuanwai is a man, he is 30 and in the beijing


15、删除一个元素的方法

>>> del dict1['age']

16、删除字典所有元素,用到clear()函数

>>> dict1.clear()>>> dict1{}


17、把字典从内存中,干掉

>>> del dict1

18、对一个字典用type()函数

>>> type(dict1)<type 'dict'>


19、字典相互比较时的算法

首先比较字典元素长度、然后是key(ASKⅡ码)、最后是value

20、cmp()函数的使用

>>> dict1 = {'name' : "wangdaye", 'age' : 25, 'city' : 'new york'}>>> dict2 = {'name' : 'wangyuanwai'}>>> dict1 > dict2True>>> cmp(dict1, dict2)1

cmp的返回值:dict1大于dict2,就会返回1,否则返回-1,相等的情况返回0


先比较两者的元素长度,若元素相同,则开始比较key,若key也相同,就开始比较value了,如果都相同,那就是一样的字典了


21、dict()函数,用于生成一个字典实例对象,确实很强大啊


22、len()函数,元素长度啦,哈哈


23、hash()函数,用于一个实例对象是否可以作为key而判断,hash返回参数的hash值


24、keys()函数

>>> dict1{'city': 'new york', 'age': 25, 'name': 'wangdaye'}>>> dict1.keys()['city', 'age', 'name']
返回一个key组成的List

25、values()函数

>>> dict1.values()['new york', 25, 'wangdaye']
返回一个value组成的List


26、update()函数,好多函数,python好刺激

慢慢看API文档吧,用的时候再议


27、字典中的value没有限制,可以是任意的Python对象


28、字典中的key有限制

a、每个key只能对应一个值,List、Set、元组,是集合,但也是一个值哦,这里要理解哦

b、key必须是有哈希值的,List和字典是可变类型,由于不是可哈希的,不可以作为key

c、所有不可变的类型都是可哈希的, 数字、字符串

d、这里要注意元组,虽然元组也是不可变类型,但是元组的元素必须是数字或者字符串才可以作为key



29、终于到Set啦,Set(集合)

a、集合与List([])和字典({})不同,没有特别的语法格式,List可以用List()函数创建、字典可以用dict()函数,

b、集合(set)的创建,只能通过 set()函数和frozenset()函数创建, 通过 它俩可以得到Set实例对象


30、s就是创建的set,哈哈

>>> s = set('abcdefg')>>> sset(['a', 'c', 'b', 'e', 'd', 'g', 'f'])


31、in 与 not in的使用

>>> 'a' in sTrue>>> 'z' in sFalse

32、通过frozenset()函数创建

>>> sSecond = frozenset('sdjfjklsdfkllkj')>>> sSecondfrozenset(['d', 'f', 'k', 'j', 'l', 's'])

33、更新集合(set),只能用接口函数了,fuck ,add()函数

>>> sset(['a', 'c', 'b', 'e', 'd', 'g', 'f'])>>> s.add('z')>>> sset(['a', 'c', 'b', 'e', 'd', 'g', 'f', 'z'])

34、set与frozenset函数的区别:frozenset得到一个不可变的集合,哈哈

>>> sSecond.add('z')Traceback (most recent call last):  File "<pyshell#11>", line 1, in <module>    sSecond.add('z')AttributeError: 'frozenset' object has no attribute 'add'>>> 

35、联合操作符 |

>>> s = set('adc')>>> sset(['a', 'c', 'd'])>>> t = frozenset('fz')>>> s | tset(['a', 'c', 'z', 'd', 'f'])


36、交集操作符 &,有点意思哈set

>>> s & tset([])


37、差补,相对补集操作符 -              底下的解释满详细了

两个集合(s 和t)的差补或相对补集是指一个集合C,该集合中的元素,只属于集合s,而不属
于集合t。差符号有一个等价的方法,difference().


38、对称差分操作符 ^                      看下面的解释吧,哈哈

和其他的布尔集合操作相似,对称差分是集合的XOR(又称”异或“ (exclusive disjunction)).
两个集合(s 和t)的对称差分是指另外一个集合C,该集合中的元素,只能是属于集合s 或者集合t
的成员,不能同时属于两个集合。对称差分有一个等价的方法,symmetric_difference().


39、当然也支持 &= 、 |= 、 ^=、-=


40、再次提到set()与frozenset()

a、set用于生成可变集合

b、frozenset用于生成不可变集合

c、不传入参数,就会得到一个空的集合


41、add()、remove、discard()、pop()、clear(),用于可变集合


42、去看Python的API文档吧,亲


任重道远啊………………








0 0
原创粉丝点击