[Python]dict和set两种数据结构

[Python]dict和set两种数据结构

【Dict】

Python内置了字典(dict,全称dictionary) 的数据结构,使用键值(Key-Value)存储,特点是查找速度快,但占用内存多于list数据结构。
当我们要存储两个相关联的列表数据时,就需要两个list 。
如:

    name = ['Mike','Adam','Jack']
    scores = ['88','79','91']

可当我们利用dict时,就只需一个。

  • 如何定义
    d = {'Mike': 88,'Adam': 79, 'Jack': 91}
    //变量名 ={'Key值1':Value值1,'Key值2':Value值2
  • dict速度快的原因
    当我们要从字典中查找一个字时,首先回去查找部首,或者拼音开头,因为这样比一页页翻的效率要高。
    dict就是利用了这种原理,也就是Key-Value 键值存储,dict中的Key等价于汉语字典中的部首,而Value就是我们需要查找的那个字。
  • dict的相关语句
    除了初始化之外,Value的值也可以通过Key来放入,也就是给Key赋值,一个Key,只能有一个Value值,多次赋值将会取最近一次的值。

    
     >>>d['Jack']=67
     >>>d['Jack']
     67

    如果给不存在的Key赋值,则会出现错误。
    要避免这种错误的,可用get来查找key,如果不存在,则返回None,或者自己给定的值

    >>> d.get('Amy')       //返回None,不显示
    >>> d.get('Amy', -1)
    -1                           

    除此之外,还有一种in的方法可查到是否存在Key

     >>>'Jack' in d      //Key值  in 变量名
     true                      //存在则为true,否则False

    当我们要删除一个Key时,需要用到pop(key)的方法, value同时也会被删除

    >>>d.pop('Jack')
    91
    >>>d
    {'Mike': 88,'Adam': 79}   //Key值‘Jack’已被删除

【Set】

set和dict类似,区别就是定义的方法不同和set无value值,

简而言之set就是一组没有value值的dict

  • 如何定义

>>>s = set(['Mike','Adam', 'Jack'])
 //变量名 = set (['Key值1','Key值2','Key值3'])
  • 相关语句
    >>>s.add('Rooney')  // set的增加语句
    >>>s
    {'Mike','Adam', 'Jack','Rooney'}
    >>>s.remove('Rooney')
    >>>s
    {'Mike','Adam', 'Jack'}

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作

set除了没有value,其他都和dict相同, 它们都无法存储 不可变量

不可变量的解释

在python 中,str为不可变量,list为可变量
由字面含义可知,对list进行操作,list是会改变的
如:

>>> a = ['c', 'b', 'a']
>>> a.sort()   //对 list变量  a进行排序
>>> a              
['a', 'b', 'c']   

可以看到,在这里, list 变量 a ,由 [‘c’, ‘b’, ‘a’]变为了[‘a’, ‘b’, ‘c’] ,发生了顺序变化

而如果对 str变量进行操作呢

>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a            //在上面str变量a已经被replace操作改变,可下面的a的值仍然是'abc'
'abc'

改进代码:

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

其实a是一个变量,指向字符”abc”所在的内存, 改变str变量a 等于新创建了一个内存存储了字符”Abc”,原来的字符并未改变,a的指向也没有改变, 但是这时候将b 指向新内存”Abc”,一切就变得明确了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值