每天五分钟python编程_每天5分钟玩转Python(07) - 基本数据类型(下)

继续上一篇的数据结构讲解,这篇讲解Set(集合)和Dictionary(字典)的使用方法。

Set(集合)

大家都知道数学中集合的定义为:将数个对象归类而分成为一个或数个形态各异的大小整体。一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。

Python中通过内置函数set()可获取到集合这种数据类型。参数可以是一个list

s=set([1,2,3])

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

s.add(4)

通过remove(key)方法可以删除元素:

s.remove(4)

既然是集合,那么就应该支持数学上的集合运算。两个set可以做数学意义上的交集、并集、差集、异或集等操作:

s1=set([1,2,3])

s2=set([2,3,4])

s1&s2#集合的交集运算

s1|s2#集合的并集运算

s1-s2#集合的差集运算

s1^s2#集合的异或运算,也就是不同时存在的元素。(要么只在s1中有,要么只在s2中有)

有一点要注意的是,set里面是不能放入可变对象的。因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。比如往set里面添加list就会报错,而添加str类型的就正常。

Dictionary(字典)

字典就是一个键值对的数据结构,这个在编程中非常常见。比如通过学号对应一个学生, 那么学号可以作为key,而学生信息作为value。

Python内置了字典的支持,初始化一个字典对象很简单。

d={}#初始化一个空的字典

d={'1001':'张三','1002':'李四'}# 带初始值的字典

添加新的键值对也非常简单:

d['1003']='王五'

由于一个key只能对应一个value,所以,多次对一个key放入value, 后面的值会把前面的值冲掉,这时候就是相当于更新这个键值对了:

d['1003']='赵六'

如果访问字典的时候key不存在,dict就会报错:

print(d['9999'])

报错:

Traceback(most recent calllast):

File"D:/projects/python/core-python/test.py",line20,in

print(d['9999'])

KeyError:'9999'

要避免key不存在的错误,有两种办法。

第一种是在访问字典之前,先通过in判断key是否存在,如果存在再访问:

if'9999'ind:

print(d['9999'])

第二种是调用dict提供的get()方法,传入一个默认值。如果key不存在则返回默认值

print(d.get('9999','default'))

要从字典中删除一个key,可以使用

pop

()

方法,对应的key/value对也会从dict中删除:

print(d)

result=d.pop('1002')

print(d)

输出结果:

{'1001':'张三','1002':'李四'}

{'1001':'张三'}

还有一点需要注意的是,dict内部存放的顺序和key放入的顺序是没有关系的。并且dict中的key跟集合一样必须是不可变对象。

可变和不可变对象

上面讲到集合和字典的时候都提到了可变对象、不可变对象。那么这两者到底有啥区别。其实从字面含义上就已经很容易理解,不可变对象就是只对象一旦初始化后,其状态或内容都不允许发生改变了。而不可变对象随时都可以改变状态和内容。

比如字符串str类型就是不可变对象,而列表list类型就是可变对象。

str1='123456'

str2=str1.replace('1','9')

print(str1)

print(str2)

list=['1','2']

print(list)

list.append('3')

print(list)

输出如下

123456

923456

['1','2']

['1','2','3']

可以看到,变量str1指向的对象内容始终是

123456

。即使在上面进行了一次替换操作, 这次替换操作会返回一个新的str对象。而列表list对象在对它进行操作后,内容以及改变了。

对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。一般来讲这些方法会创建新的对象并返回, 这样,就保证了不可变对象本身永远是不可变的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值