Python学习,第五课 - 列表、字典、元组操作
本篇主要详细讲解Python中常用的列表、字典、元组相关的操作
一、列表
列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
通过下标获取元素
#先定义一个列表
letters = ['a', 'b', 'c', 'd', 'e'] letters[1]
#输出:b
#列表的索引是从0开始 letters[-1]
#输出:e
#也可以倒着取,-1既倒数第一个元素
切片:获取列表中多个元素
letters = ['a', 'b', 'c', 'd', 'e'] #从下标1开始,取到下标3之前,不包括下标3
letters[1:3]
#输出结果:['b', 'c'] #取下标2到-1,-1既倒数第一个,这里不包括-1
letters[2:-1]
#输出结果:['c', 'd'] letters[0:-1]
#如果从0开始取,0可以不输入,下面这个和上面一样的效果
letters[:-1]
#输出结果都是:['a', 'b', 'c', 'd'] #取到结尾,如果想取到最后一个不能用-1,直接忽略既可
letters[1:]
#输出结果:['b', 'c', 'd', 'e'] #如果在后面加一个2,就是在原有的条件下,每隔一个元素获取一个
letters[1::2]
#输出结果:['b', 'd']
追加 append
letters = ['a', 'b', 'c', 'd', 'e']
letters.append('f')
print(letters)
#输出结果:['a', 'b', 'c', 'd', 'e', 'f']
#就是在列表结尾添加一个新元素
插入 insert
letters = ['a', 'b', 'c', 'd', 'e']
letters.insert(3, 'F')
print(letters)
#输出结果:['a', 'b', 'c', 'F', 'd', 'e']
#在下标3的位置插入一个元素
修改
letters = ['a', 'b', 'c', 'd', 'e']
letters[0] = 'A'
print(letters)
#输出结果:['A', 'b', 'c', 'd', 'e']
#修改指定下标的元素
删除
letters = ['a', 'b', 'c', 'd', 'e'] #del删除索引元素
del letters[0]
#输出结果:['b', 'c', 'd', 'e'] #remove删除指定元素
letters.remove('b')
#输出结果:['a', 'c', 'd', 'e'] #pop删除列表中最后一个值
letters.pop()
#输出结果:['a', 'b', 'c', 'd']
扩展 extend
letters = ['a', 'b', 'c', 'd', 'e']
letters2 = [1, 2, 3, 4]
letters.extend(letters2)
#输出结果:['a', 'b', 'c', 'd', 'e', 1, 2, 3, 4]
#既把列表letters2的元素都添加到letters中
拷贝
letters = ['a', 'b', 'c', 'd', 'e', ['f', 'g']]
letters_copy = letters.copy()
print(letters_copy)
#输出结果:['a', 'b', 'c', 'd', 'e', ['f', 'g']]
看上面的方法好像确实copy成功了。但是还没完,我们在来试试修改copy之后的列表
letters = ['a', 'b', 'c', 'd', 'e', ['f', 'g']]
letters_copy = letters.copy()
letters_copy[5][1] = 'h'
print(letters)
print(letters_copy)
#输出结果:
#['a', 'b', 'c', 'd', 'e', ['f', 'h']]
#['a', 'b', 'c', 'd', 'e', ['f', 'h']]
我们上面吧 letters_copy 的第5个元素中的 ‘g’改成‘h’,结果打印结果发现,letters也跟着改变了。
其实此处copy是浅copy,只copy列表的第一层,第二层没有copy,而是指向相同地址
第二个列表中的元素只是第一个列表中每一个元素的一个引用
那么重点来了,我们想要完全copy一个列表的时候怎么办?当然有办法
引用一个copy模块,调用copy模块中的deepcopy方法,既可实现深copy
import copy letters = ['a', 'b', 'c', 'd', 'e', ['f', 'g']]
letters_copy = copy.deepcopy(letters)
letters_copy[5][1] = 'h'
print(letters)
print(letters_copy)
#输出结果:
#['a', 'b', 'c', 'd', 'e', ['f', 'g']]
#['a', 'b', 'c', 'd', 'e', ['f', 'h']]
这样就可以完全copy了。
统计 count
letters = ['a', 'b', 'c', 'd', 'e', 'b']
print(letters.count('b'))
#输出结果:2
#统计指定元素在列表中的数量
排序 sort
letters = ['a', '#b', '1f', 'c', 'e', 'd', '承受']
letters.sort()
print(letters)
#输出结果:['#b', '1f', 'a', 'c', 'd', 'e', '承受']
#将列表安装顺序从新排序
#排序的顺序是,特殊符号-->数字-->字母-->汉字 #这里要注意,在Python 3中,不同数据类型是不能排序的,否则会报错
letters = ['a', 'b', 'f', 'c', 'e', 'd', 1, 2]
letters.sort()
#像上面这样的列表排序就会报错
#TypeError: unorderable types: int() < str()
反转 reverse
letters = ['a', 'b', 'c', 'd', 'e']
letters.reverse()
print(letters)
#输出结果:['e', 'd', 'c', 'b', 'a']
#将列表倒序
获取下标 index
letters = ['a', 'b', 'c', 'd', 'e']
print(letters.index('b'))
#输出结果:1
#获取指定元素的下标位置
二、字典
字典是一种key - value 的数据类型,使用就像我们用的字典,通过笔划、字母来查对应页的详细内容,一个键对应一个值。
语法如下:
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
这里要说下字典有哪些特性:
- 字典是无序的,所以字典中元素每次的位置都可能变化
- 字典中key必须是唯一的,所以字典的键天生就去重了
增加
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
info['name06'] = '黄汉升'
print(info)
#输出结果:{'name05': '马孟起', 'name01': '刘玄德', 'name03': '张翼德', 'name06': '黄汉升', 'name04': '赵子龙', 'name02': '关云长'}
#直接给一个不存在的键赋值就可以添加一个字典元素了
修改
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
info['name05'] = '黄汉升'
print(info)
#输出结果:{'name04': '赵子龙', 'name02': '关云长', 'name01': '刘玄德', 'name03': '张翼德', 'name05': '黄汉升'}
#方法和添加一样,只要键值存在,则直接覆盖
删除
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
#删除方法有多种
#1.用pop删除,用到最多且最好的一种
info.pop('name01') #2.del 内置的删除函数,和第一种效果一样
del info['name02'] #3.popitem,这个是在字典中随机删除一个元素
info.popitem() print(info)
#输出结果:{'name03': '张翼德', 'name05': '马孟起'}
查找
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
#in判断key是否存在
print('name01' in info)
#输出结果:True #get获取key的值
print(info.get('name02'))
#输出结果:关云长 #同上获取key的值
print(info['name02'])
#输出结果:关云长
#这里要注意,用这种方法取值,如果key不存在程序会报错
print(info['name12'])
#报错KeyError: 'name102'
#如果使用get则不会报错,会返回None
多级字典的相关操作
heros = {
'魏国':{
'曹操':['枭雄','对酒当歌人生几何'],
'司马懿':['谋略滔天']
},
'蜀国':{
'刘备':['哭'],
'关羽':['义薄云天']
},
'吴国':{
'孙权':['年少有为'],
'周瑜':['既生瑜何生亮']
}
}
heros['魏国']['曹操'][0] += ',宁可我负天下人'
print(heros['魏国']['曹操'])
#输出结果:['枭雄,宁可我负天下人', '对酒当歌人生几何']
#直接在元素中追加了内容
取所有键和值
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
#取所有键
print(info.keys())
#输出结果:dict_keys(['name04', 'name01', 'name03', 'name02', 'name05']) #取所有值
print(info.values())
#输出结果:dict_values(['赵子龙', '刘玄德', '张翼德', '关云长', '马孟起'])
setdefault 函数
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
#字典中不存在key则添加元素,否则返回对应key的值
print(info.setdefault('name01','曹孟德'))
#输出结果:刘玄德 print(info.setdefault('name06','曹孟德'))
#输出结果:曹孟德
update 函数
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
info2 = {
'name01':'曹孟德',
'name10':'曹子孝'
}
#对已有键值就更新,没有的键值则添加
info.update(info2)
print(info)
#输出结果:{'name04': '赵子龙', 'name05': '马孟起', 'name03': '张翼德', 'name01': '曹孟德', 'name10': '曹子孝', 'name02': '关云长'}
items
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
print(info.items())
#输出结果:dict_items([('name01', '刘玄德'), ('name02', '关云长'), ('name04', '赵子龙'), ('name03', '张翼德'), ('name05', '马孟起')])
#字典转成元组
循环遍历字典dict
info = {
'name01': '刘玄德',
'name02': '关云长',
'name03': '张翼德',
'name04': '赵子龙',
'name05': '马孟起'
}
#方法一: 这个是最基本的循环,也是最建议使用的
for key in info:
print(key,info[key])
#方法二:这个循环会把字典先转成列表,然后循环,性能和第一种方法差很多,如果数据量大区最好别用
for k,v in info.items():
print(k,v) #输出结果:
#name01 刘玄德
#name04 赵子龙
#name03 张翼德
#name05 马孟起
#name02 关云长
三、元组
元组其实跟列表差不多,也是存一组数,只是它一旦创建,便不能再修改,所以又叫只读列表
语法:
heros =('曹操','刘备','孙权')
它只有2个方法,一个是count,一个是index
Python学习,第五课 - 列表、字典、元组操作的更多相关文章
- python学习4—数据结构之列表、元组与字典
python学习4—数据结构之列表.元组与字典 列表(list)深灰魔法 1. 连续索引 li = [1,1,[1,["asdsa",4]]] li[2][1][1][0] 2. ...
- python教程(五)·列表与元组
在介绍了通用的序列操作后,我们来学习序列类型中的列表和元组 列表 回顾 我们已经初步学习了列表,在深入之前,让我们简单回顾一下以往的知识. 创建列表的方法: >>> list_1 = ...
- Python学习三---序列、列表、元组
一.序列 1.1.序列概念 pythn中最基本的数据结构是序列(sequence). 序列中每个元素被分配一个序号-元素索引,第一个索引是0,第二个是1,以此类推.类似JAVA中数组和集合中的下标. ...
- 【python学习笔记】2.列表和元组
# 第二章:列表和元组 序列中,每个元素都有个一个序号,序号以0开始,最后一个元素序号为-1,倒数第二个-2 序列类型包括,列表,元组,字符串,unicode字符串,buffer, xrange ...
- python学习(二) 列表和元组
第2章 列表和元组 2.1 序列概论 python有六种内建的序列,本章讨论最常用的两种类型:列表和元组.其他的内建序列有字符串.Unicode字符串.buffer对象和xragne对象. 列表和元 ...
- python学习(五)列表
#!/usr/bin/python # 列表的学习, 列表的概念不陌生, 就是熟悉一下python中的列表是如何操作的 # 1. 序列的操作 L = [ 123, 'spam', 1.23] # 里面 ...
- Python学习(四)—— 列表和元组的类中方法
列表 list:用中括号括起来,用“,”分割每个元素,列表中的元素可以是 数字.字符串.列表.布尔值......所有东西,可以说就是一个“集合” li = [1,3,5,'alex','age',[' ...
- python学习笔记之一:列表与元组
最近在看<python基础教程>(基于python2.x),下面总结一下第二章列表与元组的知识: 在这章中引入了数据结构的概念.数据结构是通过某种方式组织在一起的数据元素的集合.在pyth ...
- python学习之模块(pip),列表生成式,模块操作mysql,excel
python基础 生成式 列表生成式 格式 [表达式 for 表达式 in 迭代对象 (可加判断)] 原: res1 = [] for i in range(1,5): res1.append(i) ...
- python学习小总结(列表、元组、字典、集合、字符串)
---恢复内容开始--- 一.列表(list) 1.添加 append():追加,在列表末尾添加元素. 列表名.append(添加的元素) extend():扩展,在列表末尾添加元素. 列表名.ext ...
随机推荐
- 微软软件开发技术二十年回顾-Windows DNA篇
五. Windows DNA篇 微软的Windows分布式因特网应用体系(简称Windows DNA)是微软创建新一代高适应性商业解 决方案的框架,它使公司能够充分地挖掘数字神经系统的优点.Windo ...
- Canal常用配置
Canal 是mysql数据库binlog的增量订阅&消费组件. 基于日志增量订阅&消费支持的业务: 数据库镜像 数据库实时备份 多级索引 (卖家和买家各自分库索引) search b ...
- 30分钟全方位了解阿里云Elasticsearch(附公开课完整视频)
摘要: 阿里云Elasticsearch提供100%兼容开源Elasticsearch的功能,以及Security.Machine Learning.Graph.APM等商业功能,致力于数据分析.数据 ...
- Appium+Pytest实现app并发测试
前言 这个功能已经写完很长时间了,一直没有发出来,今天先把代码发出来吧,有一些代码是参考网上写的,具体的代码说明今天暂时先不发了,代码解释的太详细还得我花点时间^_^, 毕竟想让每个人都能看明白也不容 ...
- 深入ThreadLocal的底层实现机制以及对应的使用风险
学习Java中常用的开源框架,Mybatis.Hibernate中线程通过数据库连接对象Connection,对其数据进行操作,都会使用ThreadLocal类来保证Java多线程程序访问和数据库数据 ...
- mysql主从之keepalive+MySQL高可用
一 keepalive介绍 1.1 keepalived 是什么 keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障. 1.2 keepalived 工作原理 keepa ...
- C# 为什么说事件是一种特殊的委托
很多人说C#的事件是一种特殊的委托,其实并不是,这是对事件的一种误解 C# 事件模型的五个组成部分 1.事件的拥有者 2.事件成员(事件的本身) 3.事件响应者 4.事件处理器:本质上是一种回调方法 ...
- 【生活】记第一次参加CCF CSP认证
2018年03月18日 CCF CSP认证 三月份的这次csp认证,我之前是没报名的,一来自己还没什么准备,二来去年的那次认证我也没参加,开考前的一个礼拜,从朋友那得知,这次学校团体报名的名额还没报满 ...
- Python用PIL将PNG图像合成gif时如果背景为透明时图像出现重影的解决办法
最近在用PIL合成PNG图像为GIF时,因为需要透明背景,所以就用putpixel的方法替换背景为透明,但是在合成GIF时,图像出现了重影,在网上查找了GIF的相关资料:GIF相关资料 其中有对GIF ...
- 1034 有理数四则运算 (20 分)C语言
题目描述 本题要求编写程序,计算2个有理数的和.差.积.商. 输入描述: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整 ...