本篇主要详细讲解Python中常用的列表、字典、元组相关的操作

一、列表

列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

通过下标获取元素

  1. #先定义一个列表
  2. letters = ['a', 'b', 'c', 'd', 'e']
  3.  
  4. letters[1]
  5. #输出:b
  6. #列表的索引是从0开始
  7.  
  8. letters[-1]
  9. #输出:e
  10. #也可以倒着取,-1既倒数第一个元素

切片:获取列表中多个元素

  1. letters = ['a', 'b', 'c', 'd', 'e']
  2.  
  3. #从下标1开始,取到下标3之前,不包括下标3
  4. letters[1:3]
  5. #输出结果:['b', 'c']
  6.  
  7. #取下标2到-1,-1既倒数第一个,这里不包括-1
  8. letters[2:-1]
  9. #输出结果:['c', 'd']
  10.  
  11. letters[0:-1]
  12. #如果从0开始取,0可以不输入,下面这个和上面一样的效果
  13. letters[:-1]
  14. #输出结果都是:['a', 'b', 'c', 'd']
  15.  
  16. #取到结尾,如果想取到最后一个不能用-1,直接忽略既可
  17. letters[1:]
  18. #输出结果:['b', 'c', 'd', 'e']
  19.  
  20. #如果在后面加一个2,就是在原有的条件下,每隔一个元素获取一个
  21. letters[1::2]
  22. #输出结果:['b', 'd']

追加 append

  1. letters = ['a', 'b', 'c', 'd', 'e']
  2. letters.append('f')
  3. print(letters)
  4. #输出结果:['a', 'b', 'c', 'd', 'e', 'f']
  5. #就是在列表结尾添加一个新元素

插入 insert

  1. letters = ['a', 'b', 'c', 'd', 'e']
  2. letters.insert(3, 'F')
  3. print(letters)
  4. #输出结果:['a', 'b', 'c', 'F', 'd', 'e']
  5. #在下标3的位置插入一个元素

修改

  1. letters = ['a', 'b', 'c', 'd', 'e']
  2. letters[0] = 'A'
  3. print(letters)
  4. #输出结果:['A', 'b', 'c', 'd', 'e']
  5. #修改指定下标的元素

删除

  1. letters = ['a', 'b', 'c', 'd', 'e']
  2.  
  3. #del删除索引元素
  4. del letters[0]
  5. #输出结果:['b', 'c', 'd', 'e']
  6.  
  7. #remove删除指定元素
  8. letters.remove('b')
  9. #输出结果:['a', 'c', 'd', 'e']
  10.  
  11. #pop删除列表中最后一个值
  12. letters.pop()
  13. #输出结果:['a', 'b', 'c', 'd']

扩展 extend

  1. letters = ['a', 'b', 'c', 'd', 'e']
  2. letters2 = [1, 2, 3, 4]
  3. letters.extend(letters2)
  4. #输出结果:['a', 'b', 'c', 'd', 'e', 1, 2, 3, 4]
  5. #既把列表letters2的元素都添加到letters中

拷贝

  1. letters = ['a', 'b', 'c', 'd', 'e', ['f', 'g']]
  2. letters_copy = letters.copy()
  3. print(letters_copy)
  4. #输出结果:['a', 'b', 'c', 'd', 'e', ['f', 'g']]

看上面的方法好像确实copy成功了。但是还没完,我们在来试试修改copy之后的列表

  1. letters = ['a', 'b', 'c', 'd', 'e', ['f', 'g']]
  2. letters_copy = letters.copy()
  3. letters_copy[5][1] = 'h'
  4. print(letters)
  5. print(letters_copy)
  6. #输出结果:
  7. #['a', 'b', 'c', 'd', 'e', ['f', 'h']]
  8. #['a', 'b', 'c', 'd', 'e', ['f', 'h']]

我们上面吧 letters_copy 的第5个元素中的 ‘g’改成‘h’,结果打印结果发现,letters也跟着改变了。

其实此处copy是浅copy,只copy列表的第一层,第二层没有copy,而是指向相同地址

第二个列表中的元素只是第一个列表中每一个元素的一个引用

那么重点来了,我们想要完全copy一个列表的时候怎么办?当然有办法

引用一个copy模块,调用copy模块中的deepcopy方法,既可实现深copy

  1. import copy
  2.  
  3. letters = ['a', 'b', 'c', 'd', 'e', ['f', 'g']]
  4. letters_copy = copy.deepcopy(letters)
  5. letters_copy[5][1] = 'h'
  6. print(letters)
  7. print(letters_copy)
  8. #输出结果:
  9. #['a', 'b', 'c', 'd', 'e', ['f', 'g']]
  10. #['a', 'b', 'c', 'd', 'e', ['f', 'h']]

这样就可以完全copy了。

统计 count

  1. letters = ['a', 'b', 'c', 'd', 'e', 'b']
  2. print(letters.count('b'))
  3. #输出结果:2
  4. #统计指定元素在列表中的数量

排序 sort

  1. letters = ['a', '#b', '1f', 'c', 'e', 'd', '承受']
  2. letters.sort()
  3. print(letters)
  4. #输出结果:['#b', '1f', 'a', 'c', 'd', 'e', '承受']
  5. #将列表安装顺序从新排序
  6. #排序的顺序是,特殊符号-->数字-->字母-->汉字
  7.  
  8. #这里要注意,在Python 3中,不同数据类型是不能排序的,否则会报错
  9. letters = ['a', 'b', 'f', 'c', 'e', 'd', 1, 2]
  10. letters.sort()
  11. #像上面这样的列表排序就会报错
  12. #TypeError: unorderable types: int() < str()

反转 reverse

  1. letters = ['a', 'b', 'c', 'd', 'e']
  2. letters.reverse()
  3. print(letters)
  4. #输出结果:['e', 'd', 'c', 'b', 'a']
  5. #将列表倒序

获取下标 index

  1. letters = ['a', 'b', 'c', 'd', 'e']
  2. print(letters.index('b'))
  3. #输出结果:1
  4. #获取指定元素的下标位置

二、字典

字典是一种key - value 的数据类型,使用就像我们用的字典,通过笔划、字母来查对应页的详细内容,一个键对应一个值。

语法如下:

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }

这里要说下字典有哪些特性:

  • 字典是无序的,所以字典中元素每次的位置都可能变化
  • 字典中key必须是唯一的,所以字典的键天生就去重了

增加

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }
  8. info['name06'] = '黄汉升'
  9. print(info)
  10. #输出结果:{'name05': '马孟起', 'name01': '刘玄德', 'name03': '张翼德', 'name06': '黄汉升', 'name04': '赵子龙', 'name02': '关云长'}
    #直接给一个不存在的键赋值就可以添加一个字典元素了

修改

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }
  8. info['name05'] = '黄汉升'
  9. print(info)
  10. #输出结果:{'name04': '赵子龙', 'name02': '关云长', 'name01': '刘玄德', 'name03': '张翼德', 'name05': '黄汉升'}
  11. #方法和添加一样,只要键值存在,则直接覆盖

删除

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }
  8. #删除方法有多种
  9. #1.用pop删除,用到最多且最好的一种
  10. info.pop('name01')
  11.  
  12. #2.del 内置的删除函数,和第一种效果一样
  13. del info['name02']
  14.  
  15. #3.popitem,这个是在字典中随机删除一个元素
  16. info.popitem()
  17.  
  18. print(info)
  19. #输出结果:{'name03': '张翼德', 'name05': '马孟起'}

查找

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }
  8. #in判断key是否存在
  9. print('name01' in info)
  10. #输出结果:True
  11.  
  12. #get获取key的值
  13. print(info.get('name02'))
  14. #输出结果:关云长
  15.  
  16. #同上获取key的值
  17. print(info['name02'])
  18. #输出结果:关云长
  19. #这里要注意,用这种方法取值,如果key不存在程序会报错
  20. print(info['name12'])
  21. #报错KeyError: 'name102'
  22. #如果使用get则不会报错,会返回None

多级字典的相关操作

  1. heros = {
  2. '魏国':{
  3. '曹操':['枭雄','对酒当歌人生几何'],
  4. '司马懿':['谋略滔天']
  5. },
  6. '蜀国':{
  7. '刘备':['哭'],
  8. '关羽':['义薄云天']
  9. },
  10. '吴国':{
  11. '孙权':['年少有为'],
  12. '周瑜':['既生瑜何生亮']
  13. }
  14. }
  15. heros['魏国']['曹操'][0] += ',宁可我负天下人'
  16. print(heros['魏国']['曹操'])
  17. #输出结果:['枭雄,宁可我负天下人', '对酒当歌人生几何']
  18. #直接在元素中追加了内容

取所有键和值

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }
  8. #取所有键
  9. print(info.keys())
  10. #输出结果:dict_keys(['name04', 'name01', 'name03', 'name02', 'name05'])
  11.  
  12. #取所有值
  13. print(info.values())
  14. #输出结果:dict_values(['赵子龙', '刘玄德', '张翼德', '关云长', '马孟起'])

setdefault 函数

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }
  8. #字典中不存在key则添加元素,否则返回对应key的值
  9. print(info.setdefault('name01','曹孟德'))
  10. #输出结果:刘玄德
  11.  
  12. print(info.setdefault('name06','曹孟德'))
  13. #输出结果:曹孟德

update 函数

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }
  8. info2 = {
  9. 'name01':'曹孟德',
  10. 'name10':'曹子孝'
  11. }
  12. #对已有键值就更新,没有的键值则添加
  13. info.update(info2)
  14. print(info)
  15. #输出结果:{'name04': '赵子龙', 'name05': '马孟起', 'name03': '张翼德', 'name01': '曹孟德', 'name10': '曹子孝', 'name02': '关云长'}

items

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }
  8. print(info.items())
  9. #输出结果:dict_items([('name01', '刘玄德'), ('name02', '关云长'), ('name04', '赵子龙'), ('name03', '张翼德'), ('name05', '马孟起')])
  10. #字典转成元组

循环遍历字典dict

  1. info = {
  2. 'name01': '刘玄德',
  3. 'name02': '关云长',
  4. 'name03': '张翼德',
  5. 'name04': '赵子龙',
  6. 'name05': '马孟起'
  7. }
  8. #方法一: 这个是最基本的循环,也是最建议使用的
  9. for key in info:
  10. print(key,info[key])
  11. #方法二:这个循环会把字典先转成列表,然后循环,性能和第一种方法差很多,如果数据量大区最好别用
  12. for k,v in info.items():
  13. print(k,v)
  14.  
  15. #输出结果:
  16. #name01 刘玄德
  17. #name04 赵子龙
  18. #name03 张翼德
  19. #name05 马孟起
  20. #name02 关云长

三、元组

元组其实跟列表差不多,也是存一组数,只是它一旦创建,便不能再修改,所以又叫只读列表

语法:

  1. heros =('曹操','刘备','孙权')

它只有2个方法,一个是count,一个是index

Python学习,第五课 - 列表、字典、元组操作的更多相关文章

  1. python学习4—数据结构之列表、元组与字典

    python学习4—数据结构之列表.元组与字典 列表(list)深灰魔法 1. 连续索引 li = [1,1,[1,["asdsa",4]]] li[2][1][1][0] 2. ...

  2. python教程(五)·列表与元组

    在介绍了通用的序列操作后,我们来学习序列类型中的列表和元组 列表 回顾 我们已经初步学习了列表,在深入之前,让我们简单回顾一下以往的知识. 创建列表的方法: >>> list_1 = ...

  3. Python学习三---序列、列表、元组

    一.序列 1.1.序列概念 pythn中最基本的数据结构是序列(sequence). 序列中每个元素被分配一个序号-元素索引,第一个索引是0,第二个是1,以此类推.类似JAVA中数组和集合中的下标. ...

  4. 【python学习笔记】2.列表和元组

    # 第二章:列表和元组   序列中,每个元素都有个一个序号,序号以0开始,最后一个元素序号为-1,倒数第二个-2 序列类型包括,列表,元组,字符串,unicode字符串,buffer, xrange ...

  5. python学习(二) 列表和元组

    第2章  列表和元组 2.1 序列概论 python有六种内建的序列,本章讨论最常用的两种类型:列表和元组.其他的内建序列有字符串.Unicode字符串.buffer对象和xragne对象. 列表和元 ...

  6. python学习(五)列表

    #!/usr/bin/python # 列表的学习, 列表的概念不陌生, 就是熟悉一下python中的列表是如何操作的 # 1. 序列的操作 L = [ 123, 'spam', 1.23] # 里面 ...

  7. Python学习(四)—— 列表和元组的类中方法

    列表 list:用中括号括起来,用“,”分割每个元素,列表中的元素可以是 数字.字符串.列表.布尔值......所有东西,可以说就是一个“集合” li = [1,3,5,'alex','age',[' ...

  8. python学习笔记之一:列表与元组

    最近在看<python基础教程>(基于python2.x),下面总结一下第二章列表与元组的知识: 在这章中引入了数据结构的概念.数据结构是通过某种方式组织在一起的数据元素的集合.在pyth ...

  9. python学习之模块(pip),列表生成式,模块操作mysql,excel

    python基础 生成式 列表生成式 格式 [表达式 for 表达式 in 迭代对象 (可加判断)] 原: res1 = [] for i in range(1,5): res1.append(i) ...

  10. python学习小总结(列表、元组、字典、集合、字符串)

    ---恢复内容开始--- 一.列表(list) 1.添加 append():追加,在列表末尾添加元素. 列表名.append(添加的元素) extend():扩展,在列表末尾添加元素. 列表名.ext ...

随机推荐

  1. Java 学习笔记(11)——多线程

    Java内部提供了针对多线程的支持,线程是CPU执行的最小单位,在多核CPU中使用多线程,能够做到多个任务并行执行,提高效率. 使用多线程的方法 创建Thread类的子类,并重写run方法,在需要启动 ...

  2. 设计模式3——单例模式Singleton

    参考链接: 单例模式-菜鸟教程:https://www.runoob.com/design-pattern/singleton-pattern.html 这种类型的设计模式属于创建型模式,它提供了一种 ...

  3. alpha week 2/2 Scrum立会报告+燃尽图 06

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9803 小组名称:“组长”组 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶, ...

  4. Cocos Creator | 飞刀大乱斗开发教程系列(二)

    预览效果 具体内容 ■ 这一期,主要讲解主页中间人物效果的实现.也就是,在下方列表选择不同人物,上方显示不同的人物,播放不同的效果,即下图的效果实现,此部分也是采用预制 Prefab 进行实现. 英雄 ...

  5. 力扣142——环形链表 II

    原题 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos ...

  6. 1086 就不告诉你 (15分)C语言

    做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地微笑着告诉他:"五十三."本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. 输入 ...

  7. day4(dict和set)

    dict 内置字典,使用key-value存储,具有极快的查找速度. >>>d = {'michael': 95, 'bob': 75, 'tracy': 85} >>& ...

  8. linux搭建简单的web服务器

    主要想法是:使用虚拟机的Ubuntu系统搭建http服务器,然后在window的浏览器上测试 1.先测试windows和虚拟机上的ubuntu能否相互ping通 2.下载http.tar.gz并拷贝到 ...

  9. 基于Arduino的按键控制LED实验

    I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止我们设计的小灯实验都还只是应用到Arduino 的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功 ...

  10. file_get_contents函数获取不到数据的一种情况

    问题:  file_get_contents($url) 获取不到数据,尽管URL地址正确,函数使用正确.如下代码 $url = "https://www.baidu.com"; ...