Python:映像和集合类型

  1. 哈希表就是“key-value”对的组成,其中value决定着key的值,key的值决定着value的存储地址,每次对value的哈希函数操作,就是求value的key值。也是这样,哈希表是地址与内容关系是无序的。同时哈希得益于此,其访问的速度特别快。python中的字典是一种可变的哈希表,也是无序类型。不过使用Keys()和Values()可以获取可排列的key列表和value列表。items()可以获取元组列表。
  2. 可以使用迭代来访问序列对象。
++++++++++++++++++++++++++++++++++++++++
>>> d={"a":"dfjlsdlf","b":"fjldsf"}
>>> d
{'a': 'dfjlsdlf', 'b': 'fjldsf'}
++++++++++++++++++++++++++++++++++++++++
>>> d["b"]
'fjldsf'
++++++++++++++++++++++++++++++++++++++++
>>> d.keys()
['a', 'b']
++++++++++++++++++++++++++++++++++++++++
>>> d.values()
['dfjlsdlf', 'fjldsf']
++++++++++++++++++++++++++++++++++++++++
>>> d.items()
[('a', 'dfjlsdlf'), ('b', 'fjldsf')]
++++++++++++++++++++++++++++++++++++++++
>>> for key in d:
    print key
++++++++++++++++++++++++++++++++++++++++
>>> [d[key] for key in d ]
['dfjlsdlf', 'fjldsf']
>>> 

3 字典中的key是不可以变的,且是可哈希的,所以数字和字符串可以作为字典中的key,可变的列表和字典是不可以作为字典中的key。可以是用hash()这个Python内建的BIF求一个对象的哈希值。所有不可变类型都是可哈希的,他们都可以作为字典中的key,注意值相等的数字的哈希值是一样的,也就是他们是相等的键。
一种特殊的情况,假若某种类型(包括可变类型)实现了hash()函数,且返回的哈希值是整数,则该可变的类型也是可哈希,也就是可以作为键。
哈希不变是在于使其对应的内存地址不变。元组是不变的,元组在某种情况是可变,当元组中使用不变的数字和字符时,此时元组可以作为可哈希的键。

###字典不可以作为key
>>> {{23:"dfasd"}:"dskf"}
Traceback (most recent call last):
  File "<pyshell#80>", line 2, in <module>
TypeError: unhashable type: 'dict'
>>> 
###列表也不可以作为key
>>> {("dfad",):"dsf"}
{('dfad',): 'dsf'}
>>> {([],["dfadsf"]):"dfads"}
Traceback (most recent call last):
  File "<pyshell#84>", line 2, in <module>
TypeError: unhashable type: 'list'
## 值相等hash值也相等
>>> hash(23)==hash(23.0)
True
>>> 

4.字典中的比较:首先是比较字典的大小,接着是键、最后是值。用cmp()比较字典一般不是很有效。

5.keys(),values(),items()返回的都是列表,如果字典很大,返回的数值就很多,此时使用iteritems(),iterkeys()和itervalues()返回的是迭代器,这样可以节省很多内存。
6.字典中一个key只能对应一个值,单对同一个key赋值时,若该key不存在,则字典会创建该key-value,若该key已经存在,则该key的值会被后面的赋值覆盖。Python中没有字典自检重复赋值的机制。
7.集合中的元素是哈希散列的,所以集合中的元素是无序的,不会重复的。集合有两种set(可变集合)和frozenset(不可变集合)。set是不可哈希类型,frozenset是可哈希类型。集合被创建的唯一方法是set()和frozenset().

>>> set=set("asd")
>>> set
set(['a', 's', 'd'])
>>> set.add("a")
>>> set
set(['a', 's', 'd'])
#set是不可哈希类型,frozenset是可哈希类型
>>> hash(set)
Traceback (most recent call last):
  File "<pyshell#48>", line 2, in <module>
TypeError: unhashable type: 'set'
>>> hash(frozenset("fasd"))
271829940
>>> 
  1. 集合中的成员关系操作符in与not in判断一个元素是否是集合中的成员。集合中的等价操作符=判断集合中的成员是否是一样的,注意集合中的成员是么有顺序的。<与<=判断左边集合是否是右边的严格子集和子集,>与>=判断左边是否是右边的严格超集和超集。
  2. 联合”|”(union or inclusive disjunction)、交集“&”(intersection)、差补/相对补集”-“(difference 其中集合内建的一个方法difference()有同等的效果)、对称差分”^”(exclusive disjunction/symmetic difference)。操作符对两个集合操作最后得到的结果集合类型以操作符左边集合的类型一致。注意“|=”“&=”“-=”“^=”的使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值