码迷,mamicode.com
首页 > 编程语言 > 详细

python的dict和set

时间:2017-11-25 22:41:25      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:list   cti   names   改变   更改   michael   告诉   分享   core   

dict

dict是dictionary的缩写,python内置了字典,在其他语言中也称为map,使用键值对储存,具有极快的查找速度。
如果是只用list来实现,就需要两个list,先在第一个list中查找,找到之后再到另一个list中查找,显然这样速度很慢。而且list达到很长,耗时就很长很长。。。

names = [‘Michael‘, ‘Bob‘, ‘Tracy‘]
scores = [95, 75, 85]

因为一个key只对应一个value,如果多次针对一个key赋值,那么前面的key的value就会被覆盖。
还有如果key不存在,就会报错,所以我们需要提前检查key是否存在。
删除一个key:使用pop(key)方法,相对应的value也会被删除。

dict可以用在需要告诉查找的很多地方,牢记的是,dict 的key必须是不可变对象,即string,tuple,numbers。
dict查找实际是用的哈希算法。

set

set是一组key的集合,但是不存储value。由于key不能重复,所以,在set中,没有重复的key。

创建一个set

必须传入一个list作为输入集合

s = set([1,2,3]);
s//{1,2,3}

set接收一个参数,就是list或tuple或者其他可迭代对象

L = [x,y,z];
s = set(L);

但是L中的元素x,y,z有任何一个可变就会报错。

添加元素

可以重复添加,但是不会有效果

s.add(4);

删除元素

s.remove(4);

set可以看做是数学意义上的无序和无重复元素的集合,所以两个set可以做&(交集)和|(并集)运算。
set和dict唯一区别在于set没有存储对应的alue,set的原理和dict一样,同样不可以放入可变对象

python内部传值

先贴一段代码

# 对list进行测试
list0 = [1,2,"tt",["ryr","hr"]];
list1 = list0;
list1[0] = 11;
list1[1] = 22;
list1[3][0] = "aa";
list1[3][1] = "bb";

# //对数字和字符串还有tuple进行测试
a = "yrr";
b = a;
b = "rer";
c = ("gr",12,["grr",45]);
d = c;
d = ("grgr",22,["grr",455]);
# c[0] = "grggr";
# c[1] = 22;
c[2][0] = "ggrgr";
c[2][1] = "help";
print(c);
print(d);
print(a);
print(b);
print(list0);
print(list1);

技术分享图片
在python中,string,tuples,numbers是不可更改的对象,而list,dict则是可以修改的对象,我理解的修改和不可修改,是指是否能在本身上进行修改。

nfoo = 1
nfoo = 2

lstFoo = [1]
lstFoo[0] = 2

修改:虽然string,tuples,numbers可以进行修改,但是修改之后,原来内存中的那个numbers就不存在了,就被"抛弃"了,内存中又重新创建一块区域来存储另一个值。
但是对于list和tuples而言,修改的仅仅是内容改变,原来的那块内存并没有被丢弃,也没有创建新的内存。

python的dict和set

标签:list   cti   names   改变   更改   michael   告诉   分享   core   

原文地址:http://www.cnblogs.com/sminocence/p/7896532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!