博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习日记08(元组、字典、集合)
阅读量:3882 次
发布时间:2019-05-23

本文共 4207 字,大约阅读时间需要 14 分钟。

Python学习日记08(元组、字典、集合)

列表(上期内容补充)

列表的嵌套

​ 由于列表中存储的是可变化的数据类型,所以当我们把一个列表当作元素存入列表中时,列表的嵌套也就完成了。

a = ['上海', '北京', '深圳', '广东']b = ['乌海', '呼伦贝尔']a.append(b)print(a)输出结果:['上海', '北京', '深圳', '广东', ['乌海', '呼伦贝尔']]

​ 当在使用列表嵌套时,只需要将嵌套的列表当作大列表中的一个元素进行操作即可。

列表的推导式

​ 所谓的列表推导式,就是指的轻量级循环创建列表。

#   生成一个0-9的列表#	for循环写法num = []for i in range(0,10):    num.append(i)print(num)#	列表推导式写法num2 = [j for j in range(0, 10)]print(num2)输出结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

列表的复制

a = 12b = ab = 13print(b)print(a)nums1 = [1, 5, 8, 9, 10, 12]nums2 = nums1nums2[0] = 100print(nums2)print(nums1)输出结果:1312[100, 5, 8, 9, 10, 12][100, 5, 8, 9, 10, 12]

​ 在python中的赋值运算都是引用(即内存地址)。对于可变 类型而言,修改源数据的值,会改变赋值对象的值。

copy模块的使用

  • 列表的copy函数

    ​ 使用列表的copy函数,可直接将列表进行复制,编程一个全新的列表,这种赋值方法就式浅拷贝

nums1 = [1, 5, 8, 9, 10, 12]nums2 = nums1.copy()  # 调用列表的copy方法,可以复制出一个新的列表nums2[0] = 100# 修改新列表里的数据,不会影响到原有列表里的数据print(nums2)print(nums1)输出结果:[100, 5, 8, 9, 10, 12][1, 5, 8, 9, 10, 12]

​ 除了使用列表的copy函数外,Python还提供了copy模块来复制对象。copy模块提供了浅拷贝和深拷贝两种复制方法,虽然他们的使用方式相同,但在执行效果上又具有一定的差距。

  • 浅拷贝

    ​ 浅拷贝是对于对象的顶层拷贝,拷贝了对象的引用,而没有拷贝内容。

import copywords1 = ['hello', 'good', ['yes', 'ok'], 'bad']# 浅拷贝只会拷贝最外层的对象,里面的数据不会拷贝,而是直接指向words2 = copy.copy(words1)words2[0] = '你好'words2[2][0] = 'no'print(words1)  # ['hello', 'good', ['no', 'ok'], 'bad']# wrods2 里的 yes 被修改成了 noprint(words2)  # ['你好', 'good', ['no', 'ok'], 'bad']输出结果:['hello', 'good', ['no', 'ok'], 'bad']['你好', 'good', ['no', 'ok'], 'bad']

​ 可以看出来在对列表中的可变类型进行重新赋值时,源列表中的可变类型也发生了变化,而对于列表中的不可变量重新赋值时,源列表并未发生改变。

  • 深拷贝

    ​ 不同于浅拷贝,深拷贝是对于一个对象所有层次的递归拷贝。

import copywords1 = ['hello', 'good', ['yes', 'ok'], 'bad']# 深拷贝会将对象里的所有数据都进行拷贝words2 = copy.deepcopy(words1)words2[0] = '你好'words2[2][0] = 'no'print(words1)  # ['hello', 'good', ['yes', 'ok'], 'bad']print(words2)  # ['你好', 'good', ['no', 'ok'], 'bad']输出结果:['hello', 'good', ['yes', 'ok'], 'bad']['你好', 'good', ['no', 'ok'], 'bad']

​ 深拷贝完全形成两个列表。

  • 切片

    列表和字符串类似,也支持切片,而切片的本质也是浅拷贝。

元组

​ python中元组和列表类似,但是元组的元素是不可进行修改的。

元组的定义

​ 元组使用()进行定义。

​ 当需要定义一个只有一个元素的元组时,需要在唯一元素后加,

atuple = ('python','2109.56')btuple =  ('java',)

元组的特性

​ 元组中的元素是不可修改的,所以“增删改”在元组中并不存在。

字典

​ 虽然列表可以存储任意的数据类型,但是当存储的元素含义较为丰富,具有不同的意义时,列表就不能很好的体现数据间的差异了。

​ 针对列表的劣势,字典可以很好的处理不同含义的数据间的存储。

  • 列表更适合存储具有相同性质的数据,如多个名字
  • 字典更适合存储一类相同事务的不同属性。

字典的定义

​ 在字典中,数据以**键值对(key:velue)**的形式进行存储,使用{}进行定义。

person = {
'name': 'zhangsan', 'age': 18}

字典的特性

  • 字典和列表一样可以存储多个数据

  • 字典中的键值(key)唯一的,若出现多个key值,后续出现的value会覆盖掉之前key对应的value

  • key:value是一对多关系

  • 键值(key)可以使用数字、布尔、元组等不可变数据类型,但一般使用字符串。

  • 字典可以通过键值(key)进行查询相关联的值(value)

字典的操作

查看字典元素

  • 单一元素的查询

​ 除了使用指定key值进行数据查询外,get()也是一种方法。

atuple = {
'name': 'lisa', 'age': 18}print(atuple['name'])print(atuple.get('name'))输出结果:lisalisa

​ 注意:获取字典的默认值不会对字典内进行修改。

  • 字典的遍历

    • 遍历字典中的key(键)
    atuple = {
    'name': 'linshiyu', 'age': 18}for key in atuple.keys(): print(key) 输出结果:nameage
    • 遍历字典中的value
    atuple = {
    'name': 'linshiyu', 'age': 18}for value in atuple.values(): print(value) 输出结果:linshiyu18
    • 遍历字典中的项(元素)
    atuple = {
    'name': 'linshiyu', 'age': 18}for item in atuple.items(): print(item)输出结果:('name', 'linshiyu')('age', 18)
    • 遍历字典中的key:value(键值对)
    atuple = {
    'name': 'linshiyu', 'age': 18}for key,value in atuple.items(): print(f'key= {key}, value= {value}') 输出结果:key= name, value= linshiyukey= age, value= 18

添加字典元素

​ 代码格式:字典名['key'] = 'value'

​ 当使用添加语句时,如果key值在字典中不存在,那么字典会新增这个键值对

atuple = {
'name': 'linshiyu', 'age': 18}atuple['address'] = '上海'print(atuple)输出结果:{
'name': 'linshiyu', 'age': 18, 'address': '上海'}

删除字典元素

​ python提供了两种删除字典的方法

  • del方法 指定删除字典中的键,当键消失时它所对应的value值也会消失;也可以删除整个字典(包括字典名)
info = {
'name':'班长', 'id':100}print('删除前,%s' % info)del info['name'] # del 可以通过键删除字典里的指定元素print('删除后,%s' % info)输出结果:删除前,{
'name': '班长', 'id': 100}删除后,{
'id': 100}
  • clear()函数 清空字典
info = {
'name':'monitor', 'id':100}print('清空前,%s'%info)info.clear()print('清空后,%s'%info)输出结果:清空前,{
'name': 'monitor', 'id': 100}清空后,{
}

修改字典

​ 修改字典中的元素,就是修改字典中键值对key:velue中的value值。

atuple = {
'name': 'linshiyu', 'age': 18}atuple['age'] = 25print(atuple)输出结果:{
'name': 'linshiyu', 'age': 25}

集合

​ 集合(set)是一个无序的不重复元素的序列,可以使用{}set()函数进行创建。

​ 字典和集合都是用到{},但定义一个空集合时只能使用set();

{}代表一个空字典

集合常用函数

方法 描述
add() 为集合添加元素
clear() 移除集合中的所有元素
copy() 拷贝一个集合
pop() 随机移除元素
remove() 移除指定元素
union 返回两个集合的并集
update() 给集合添加元素

转载地址:http://ukzhn.baihongyu.com/

你可能感兴趣的文章
HTML我的家乡杭州网页设计作业源码(div+css)~ HTML+CSS网页设计期末课程大作业 ~ web前端开发技术 ~ web课程设计网页规划与设计 ~HTML期末大作业
查看>>
HTML网页设计期末课程大作业~动漫樱桃小丸子5页表格div+css学生网页设计作业源码
查看>>
HTML学生网页设计作业成品~化妆品官方网站设计与实现(HTML+CSS+JS)共8个页面
查看>>
web课程设计网页规划与设计~在线阅读小说网页共6个页面(HTML+CSS+JavaScript+Bootstrap)
查看>>
HTML期末大作业~棋牌游戏静态网站(6个页面) HTML+CSS+JavaScript
查看>>
XmlValidationModeDetector源码分析
查看>>
解析 xml 为Document
查看>>
中国银行2013年校园招聘机试回忆录(综合部分专业题 考点)
查看>>
广发银行2013校园招聘笔试回忆录
查看>>
Android canvas rotate():平移旋转坐标系至任意原点任意角度-------附:android反三角函数小结...
查看>>
Matlab读取avi视频并播放 你必须要知道的
查看>>
word字体大小与公式编辑器字体对照表
查看>>
visio画图-----如何克服两箭头交叉变形 及 箭头自动重绘?
查看>>
Android开发:安装NDK,移植OpenCV2.3.1,JNI调用OpenCV全过程
查看>>
“金9银10”2020年JVM高频率面试题整理,技术提升就差一个点!
查看>>
简简单单的分享2020常见的MySQL面试题MySQL与答案整理
查看>>
听说只有大厂的Android工程师才能全答对这20道题?我看你在吹牛哦!
查看>>
武功秘籍之 Redis 面试题全掌握,学完马上找面试官对线!
查看>>
50道!2020年!!MySQL高频数据库面试题解析,你都懂了吗?
查看>>
如何用Spring Boot加密配置文件中的特殊内容示例代码详解
查看>>