初识python————数据类型(三)

那么好,终于也是来到了初识python----数据类型的最后一期,在本期中,我们一起来学习最后一类数据类型——散列类型,温馨提示:本期内容较多,有需要的小伙伴请耐心观看

三、散列类型

首先,什么是散列类型?不同于序列类型,散列类型是无序的,内部元素是不重复的,并且是没有下标的,其次,散列类型主要分为字典(dict)和 集合(set),下面,我们来对其一一进行学习

3.1 字典

在开始学习字典之前,先介绍一下什么是键值,类似与生活中根据拼音查找某个汉字,这里的拼音就是键(key),而查找到的汉字就是值(value),字典也就是可以根据键快速的查找到想要的值,最后介绍一下字典的表现形式:{key:value} ,其中存储的值被我们成为键值对,而这样存储数据的方式就被称为字典。下面,我们一起来创建一份字典

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}

这样,我们就成功创建了一份保存联系人与电话号码的字典,那么,我们又该怎样获取联系人对应的电话号码呢?这就要提到字典的输出方式了:字典名[键]

例:取出联系人Bob对应的电话号码

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
print(Phone_Number['Bob'])

#输出结果
123789

从这个例子可以看出,因为键:Bob 对应的值为 123789 ,因此打印结果就为就为123789,通过这个简单的例子,我想你应该学会了如何取出字典键对应的值,下面,我们接着学习字典的常用操作

3.1.1 常用操作

3.1.1.1 通过键(key)访问到对应的值(value)

该方法开始已经介绍过,在这里不作过多赘述,直接看例子

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
print(Phone_Number['Bob'])

#输出结果
123789
3.1.1.2 通过键(key)添加键值对(key-value)

如果想要为字典添加键值对,就只需为不存在的键赋值即可

例:新添加联系人Jane,其号码为156798

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
Phone_Number['Jane'] = 156798
print(Phone_Number)

#输出结果
{'Mike':123456,'Bob':123789,'Henry':456789,'Jane':156798}

这样,我们就成功添加了新联系人Jane和其电话号码

3.1.1.3 通过键(key)删除键值对(key-value)

语法:

del 字典名[需要删除键值对的键(key)]

例:删除联系人Henry的联系方式

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
del Phone_Number['henry']

print(Phone_Number)

#输出结果
{'Mike':123456,'Bob':123789}

这样,我们就成功删除了Henry的联系方式

3.1.1.4 通过键(key)修改键值对(key-value)

如果对原有键值对赋值,那么新赋的值就会覆盖原来的值

语法:

字典名[需要修改键值对的键(key)] = 需要修改的值

例:将Mike的电话号码更新为134567

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
Phone_Nmber['Mike'] = 134567

print(Phone_Number) 

#输出结果
{'Mike':134567,'Bob':123789,'Henry':456789}

这样,我们就成功更新了Mike的电话号码

3.1.1.5 通过键(key)判断指定键值对(key-value)是否存在

该操作通过使用 in 或者 not in 来实现,并且得到一个布尔值

例:判断Bob 和 May 的电话号码是否都在Phone_Number 内

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}

print('Bob' in Phone_Number)
print('may' in Phone_Number) 
print('Bob' not in Phone_Number)
print('May' not in Phone_Number)

#输出结果
True
False
False
True

注意:上述操作均是基于键(key)来完成的,小伙伴们在自己练习时可千万别弄错了

另外,字典的键(key)可以是任意的不可变类型,并且,字典的键(key)是不可以重复的,如果出现重复,就默认取最后一个重复键的值,具体来看一下下面的这个例子

dict1 = {'a':1,'b':2,'c':3,'b':4,'b':6}
print(dict1)

#输出结果
{'a': 1, 'b': 6, 'c': 3}

可以看出,b对应右三个值2,4,6,而最后输出时,默认取的是最后一个值,也就是6

好,介绍完了字典的常用操作方法后,我们再来认识一下其常用的方法

3.1.2 常用方法

3.1.2.1 ciear() 方法

该方法用于清空字典的所有键值对(key-value)

语法:

字典名.clear()

例:清空字典Phone_Number

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
Phone_Number.clear()

print(Phone_Number)

#输出结果
{}

这样,就成功清空了字典Phone_number,从而使其变成了一个空字典,因而打印结果为一个大括号{}

3.1.2.2 get() 方法

该方法根据键(key)获取值,不同于直接通过键获取值,通过该方法获取值时,若键(key)不存在,则返会None,而直接通过键获取值时,若键不存在,就会报错

例:使用get() 方法获取Phone_Number中,Henry对应的电话号码,并且,通过get() 方法以及直接通过键获取不存在的键May

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
print(Phone_Number.get('Henry'))

print(Phone_Number.get('May'))
print(Phone_Number['May'])

#输出结果
456789
None
#报错信息
KeyError: 'May'

可以看出,通过键直接获取值时,编译器会出现报错信息,因为该键不存在,所以出现keyError

3.1.2.3 update() 方法

该方法可以使用一个字典所包含的键值对来更新已有的字典,在执行该方法时,若被更新的字典中已经包含了对应的键值对,那么原来的值就会被覆盖,若被更新的字典中不包含对应的键值对,那么热键值对就会被添加进去

语法:

字典名.update(包含更新内容的字典)

例:只操作一次将May:145678,Jane:134567添加到Phone_Number中

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
Phone_Number.update({'May':145678,'Jane':134567})
print(Phone_Number)

#输出结果
{'Mike': 123456, 'Bob': 123789, 'Henry': 456789, 'May': 145678, 'Jane': 134567}

这样,我们就通过一次操作成功的更新了字典Phone_Number

3.1.2.4 items()方法

语法:

字典名.items()

该方法可以的到字典中的所有键值对,并返回一个dict_items对象,该对象可以被转换为列表(类型转换在后面几期中将会介绍,不明白的小伙伴也无需着急)

例:获取字典Phone_Number中的所有键值对,并将其转换为列表

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
A = Phone_Number.items()  #使用一个变量去接收dic_items对象

print(A)
print(list(A))  # 完成类型转换,并输出

#输出结果
dict_items([('Mike', 123456), ('Bob', 123789), ('Henry', 456789)])
[('Mike', 123456), ('Bob', 123789), ('Henry', 456789)]

可以看出,经过item()方法以及类型转换后,字典Phone_Number最终被转换为了一份列表

3.1.2.5 keys()方法

语法:

字典名.keys()

该方法可以的到所有的键,并返回一个dict_keys对象,同样也可转为一份列表

例:获取字典Phone_Number的所有键,并转换为列表

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
A = Phone_Number.keys()  #使用一个变量去接收dic_keys对象

print(A)
print(list(A))  # 完成类型转换,并输出

#输出结果
dict_keys(['Mike', 'Bob', 'Henry'])
['Mike', 'Bob', 'Henry']

可以看出,通过keys()方法以及类型转换后,最终以列表的形式打印出了字典Phone_Number的所有键

3.1.2.6 values()方法

语法:

字典名.values()

该方法可以得到字典的所有值,并返回一个dict_values对象

例:获取字典Phone_Number的所有值,并以列表的形式输出

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
A = Phone_Number.values()  #使用一个变量去接收dic_values对象

print(A)
print(list(A))  # 完成类型转换,并输出

#输出结果
dict_values([123456, 123789, 456789])
[123456, 123789, 456789]

可以看出,经过values()方法以及类型装换后,最终以列表的形式输出了字典Phone_Number的所有值

3.1.2.7 pop() 方法

该方法用于获取指定的键(key)对应的值(value),并且删除这个键值对

例:获取字典Phone_Number中Mike对应的电话号码,并删除这个键值对

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
print(Phone_Number.pop('Mike'))
print(Phone_Number)

#输出结果
123456
{'Bob': 123789, 'Henry': 456789}

可以看出,该方法获取指定键对应的值后便会删除整个键值对

3.1.2.8 setdefault() 方法

该方法根据键获取值,但不同与get()方法以及通过键直接获取值,当要获取的·键在字典中不存在时,该方法会为这个不存在的键设置一个默认的值,然后返回键对应的值

语法:

字典名.setdefault(新增的键(key),新增的值(value))

例:为字典Phone_Number新增键值对 Mary:145678

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
Phone_Number.setdefault('May',145678)

print(Phone_Number)

#输出结果
{'Mike': 123456, 'Bob': 123789, 'Henry': 456789, 'May': 145678}

这样,就成功的为字典Phone_Number添加了新的键值对

另外,如果新增加内容的键值对存在,那么该方法就不会修改字典中的内容

例:为字典Phone_Number新增键值对Bob:134678

Phone_Number = {'Mike':123456,'Bob':123789,'Henry':456789}
Phone_Number.setdefault('Bob',134678)

print(Phone_Number)

#输出结果

{'Mike': 123456, 'Bob': 123789, 'Henry': 456789}

可以看出,字典中的键值对Bob:123789并没有被setdefault()方法修改

学习完了字典的所有内容,接下来让我们一起开启集合的学习

3.2 集合

首先,集合是用来保存不重复的元素,也就是说集合中的元素是唯一且互不相同的,这与数学上的集合一致,其次,介绍一下其语法

集合名 = {数据1,数据2,数据3...}

注意:集合只能存储不可变类型,并且重复的数据是不会被添加到集合的内存空间里的

不同与其他空类型的表示,集合的空类型表现形式为 set() 

最后,python中的集合主要是用来处理去重问题以及数学关系运算

3.2.1 去重

例:对列表list1 = [1,3,4,6,7,9,5,3,4,3,1,2,4] 进行去重处理,并以列表的形式输出

list1 = [1,3,4,6,7,9,5,3,4,3,1,2,4]
#对list1进行去重处理
A = set(list1) # 去重后的list1被转换为了一个集合
list2 = list(A) # 将集合A重新转换为列表

print(list2) 

#输出结果
[1, 2, 3, 4, 5, 6, 7, 9]

可以看出,经过集合处理后,list1中的重复元素最终被去除

3.2.2 数学运算

首先,介绍一下对应的运算符

例:set1 = {1,2,3,4,5},set2 = {4,5,6,7,8},对这两个集合进行交集、并集、差集以及in和not in运算                

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}

print(set1 & set2)
print(set1 | set2)
print(set1 - set2)
print(6 in set2)
print(0 in set1)

#输出结果
{4, 5}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3}
True
False

  以上便是数学运算的结果

下面,我们来学习集合的常用方法

3.2.3 常用方法

3.2.3.1 增加元素 add()

语法:

集合名.add(需要添加的对象)

注意:该方法为字符串集合添加新元素时是无序的

例:为集合set1 = {'Hello','python'},添加新元素'world'

set1 = {'Hello','python'}
set1.add('world')

print(set1)

#输出结果
{'Hello', 'world', 'python'}

可以看出,当添加新元素时,新元素的位置是无序的

3.2.3.2 删除元素
3.2.3.2.1 pop()方法

语法:

集合名.pop()

该方法只有集合元素是字符串类型并且在电脑cmd窗口运行时才会随机删除元素,在编译器中运行时默认删除第一个元素

set2 = {'Hello', 'world', 'python'}
set2.pop()

print(set2)

#编译器中运行结果
{'python', 'world'}
#cmd窗口运行结果
{'Hello','python'}

可以看出,在不同环境下运行得到的结果是不同的,这点大家一定要注意

3.2.3.2.2 remove()方法

语法:

集合名.remove(需要删除的元素)

例:删除集合set2 = {'Hello', 'world', 'python'} 中的'world'

set2 = {'Hello', 'world', 'python'}
set2.remove('world')

print(set2)

#输出结果
{'Hello','python'}
3.2.3.2.3 discard()方法

语法:

字典名.discard

该方法和remove()方法类似,但是当元素不存在时也不会报错,并打印原来的集合

例:

set2 = {'Hello', 'world', 'python'}
set2.discard('AAA')

print(set2)

#输出结果
{'Hello','world','python'} # 不会报错
3.2.3.2.4 clear()方法

该方法可以清空集合中的所有元素

语法:

集合名.clear()

例:清空集合set2 = {'Hello', 'world', 'python'}

set2 = {'Hello', 'world', 'python'}
set2.clear()

print(set2)

#输出结果
set{}  # 空集合

可以看出,打印的结果为一个空集合

3.2.3.2.5 del 方法

该方法用于删除集合

语法:

del 集合名

例:删除集合set2 = {'Hello', 'world', 'python'},并打印结果

set2 = {'Hello', 'world', 'python'}
del set2 

print(set2)

#输出结果
NameError: name 'set2' is not defined

可以看出,因为set2已经被删除,所以在打印set2的时候就会报错,显示set2未被定义

3.2.3.3 修改元素

修改元素就是直接先删除再添加

例:把集合set2 = {'Hello', 'world', 'python'}中的'world'改为'CCC'

set2 = {'Hello', 'world', 'python'}
set2.remove('world') # 先删除
set2.add('CCC') # 再添加

print(set2)

#输出结果
{'Hello','CCC','python'}

这样,就成功的将'world'改为了'CCC'

3.2.3.4 查找元素

由于集合是一个可迭代对象,因此可以通过for循环进行遍历查询(不明白什么是可迭代对象和for循环的小伙伴也不用着急,这些在后面几期中都会有介绍)

例:查询集合set2 = {'Hello', 'world', 'python'}中的所有元素

set2 = {'Hello', 'world', 'python'}
#for循环进行遍历
for i in set2:
    print(i)

#输出结果
Hello
world
python

这样,就成功的查询到了集合set2中的所有元素

总结

一、序列类型与散列类型

序列类型:字符串、列表、元组

散列类型:字典、集合

二、可变类型与不可变类型

可变类型:列表、字典、集合

不可变类型:数字、字符串、元组

三、可变与不可变的概念

可变:值发生改变时,内存地址不变,也就是id不变,证明在改变原来的值

不可变:值发生改变时,内存地址也发生改变,也就是id也改变,证明是没有在改变原来的值,而是产生了新的值

四、序列与散列的区别

序列:相邻有序且定位灵活(索引+切片)

散列:分散无序但定位迅速(键定位)

好了,以上就是初识python----数据类型的所有内容,有需要修改的地方欢迎各位小伙伴指出,

下一期将会是python中的流程控制,感兴趣的小伙伴别错过哦~,我们下期见
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值