【Python】6“dict和set“

dict

在Python中内置有字典dict,是以键值对的形式存储,在Java中有map,在Objective-C中也称为dict。

  • 使用方法
>>>  gather = {'张三':78,'李四':59,'王五':98}
>>>  print(gather['张三'])
78
  • 通过key更改value的值
>>>  gather = {'张三':78,'李四':59,'王五':98}
>>>  print(gather['张三'])
>>>  gather['张三'] = 88
>>>  print(gather['张三'])
78
88
  • key不存在的情况

如果key值不存在,那么会报错,我们可以用in检查key是否存在存在dict中

>>>  '赵六'  in  gather
>>>  '张三'  in  gather
false
true

还可以使用dict提供的get方法检查key是否存在存在dict中,如果存在就返回key对应的value值,如果没有,可以返回自己指定的值

>>> gather.get('张三')
78
>>> gather.get('赵六','没有')
'没有'
  • 删除key
>>> gather = {'张三':78,'李四':59,'王五':98}
>>> print(gather)
{'张三': 78, '李四': 59, '王五': 98}
>>> gather.pop('张三')
78
>>> print(gather)
{'李四': 59, '王五': 98}
  • list和dict的区别

教程中提到list和dict一些特点上区别

和list比较,dict有以下几个特点:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
而list相反:
查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。

set

set的特点是有序的、无重复的,set与dict不同,set是没有value的

  • 使用方法
>>> s = set([1,2,3,4,5,3,5,6,4,7])
>>> s
{1, 2, 3, 4, 5, 6, 7}
  • 添加元素
    需要注意,如果添加set中已有的vlaue,是不会有效果的,因为set的特点就是无重复
>>> s1.add(1)
>>> s1
{1, 2, 3, 4, 5}
  • 删除元素
>>> s1.remove(1)
>>> s1
{2, 3, 4, 5}
  • 数学意义
    set可以看作数学意义上的集合,可以作交集、并集运算
>>> s1 = set([1,2,3,4,5])
>>> s2 = set([4,5,6,7,8])
>>> s1 & s2
{4, 5}
>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8}

dict与set的区别

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。

再议不可变对象

str是不可变对象,而list是可变对象。
先说list,对list进行操作时,能对list内部的内容作出改变,所以list被称为可变对象,比如:

>>> list = ['c','b','a']
>>> list.sort()
>>> list
['a', 'b', 'c']
>>> list
['a', 'b', 'c']

对list进行排序操作后,list的内容就发生改变。

再说str,它是一个不可变对象:

>>> str = 'nba'
>>> str.replace('a','A')
'nbA'
>>> str
'nba'

对str进行操作后,发现str并未发生改变。

我们可以来解释一下其中的原因:

△ 变量str指向对象’nba’,当对str进行操作时,实际上也是对’nba’进行操作,但实际上并未对str所指向的’nba’进行操作,而是生成了一个新的对象’nbA’,这里我们没有使用变量指向这个’nbA’。

△ 所以str的值,还是’nba’,如果需要这个新对象’nbA’,则需要一个新的变量来接收它:

>>> str = 'nba'
>>> str.replace('a','A')
'nbA'
>>> str
'nba'
>>> str1 = str.replace('a','A')
>>> str
'nba'
>>> str1
'nbA'

你可能感兴趣的:(python,Python)