+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(75)

2019-09(95)

2019-10(18)

2019-11(8)

2019-12(28)

2020-01(23)

2020-02(31)

Python学习,第五课 - 列表、字典、元组操作

发布于2020-02-10 14:07     阅读(1020)     评论(0)     点赞(8)     收藏(1)


本篇主要详细讲解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文章

作者:djhsj7

链接: http://www.pythonheidong.com/blog/article/230105/

来源:python黑洞网 www.pythonheidong.com

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0

赞一赞 or 踩一踩

收藏该文
已收藏

评论内容:(最多支持255个字符)

相似文章

  5171. 最接近的因数

  Python实现生成西瓜数据集的Excel文件

  Leetcode - 删除排序数组中的重复项

  python第五天-字符串

  数据结构|LeetCode(力扣)经典题:队列

  python学习笔记(3)

  TYD_初识python数据可视化库-Matplotlib

  Scrapy安装与应用教程

  python实现修改文件中的内容

  mac环境下python3.6安装pyhanlp工具包

优质资源排行榜

 python经典电子书大合集下载 下载次数 8138

 零基础java开发工程师视频教程全套,基础+进阶+项目实战(152G) 下载次数 7550

 零基础前端开发工程师视频教程全套,基础+进阶+项目实战(共120G) 下载次数 7442

 零基础大数据全套视频400G 下载次数 7006

 零基础php开发工程师视频教程全套,基础+进阶+项目实战(80G) 下载次数 6893

 零基础软件测试全套系统教程 下载次数 6506

 全套人工智能视频+pdf 下载次数 6443

 IOS全套视频教程 基础班+就业班 下载次数 4680

 编程小白的第一本python入门书(高清版)PDF下载 下载次数 3647

10  effective python编写高质量Python代码的59个有效方法 pdf下载 下载次数 3361

11  Python深度学习 pdf下载 下载次数 3156

12  笨办法学python pdf下载 下载次数 3087

13  Python Cookbook第三版中文PDF下载高清完整扫描原版 下载次数 3024

14  树莓派Python编程指南 pdf下载 下载次数 3011

15  python从入门到精通视频(全60集)python视频教程下载 下载次数 3009

16  python项目开发视频 下载次数 3002

17  使用python+pygame开发的小游戏《嗷大喵快跑》源码下载 下载次数 3000

18  黑马2017年java就业班全套视频教程 下载次数 2992

19  Python基础教程 pdf下载 下载次数 2988

20  python实战项目 平铺图像板系统源码下载,适用于想要保存,标记和共享图像,视频和网页的用户 下载次数 2987

21  利用python实现程序内存监控脚本 下载次数 2987

22  老男孩python自动化视频 下载次数 2983

23  老王python基础+进阶+项目视频教程 下载次数 2974

24  尚硅谷Go学科全套视频 下载次数 2972

25  某硅谷Python项目+AI课程+核心基础视频教程 下载次数 2968

26  Web前端实战精品课程 下载次数 2967

27  Python算法教程_中文版 pdf下载 下载次数 2966

28  tron python小游戏 下载次数 2963

29  [小甲鱼]零基础入门学习Python 下载次数 2962

30  老男孩python全栈开发15期 下载次数 2958

31  2017最新web前端开发完整视频教程附源码 下载次数 2948

32  最新全套完整JAVAWEB2018开发视频 下载次数 2926

33  流畅的Python PDF下载高清完整扫描原版 下载次数 2919

34  Spring boot实战视频6套下载 下载次数 2910

35  python全套视频十五期(116G) 下载次数 2908

36  Python高性能编程 pdf下载 下载次数 2906

37  Python项目实战 下载次数 2887

38  30个小时搞定Python网络爬虫 含源码 下载次数 2884

39  简明python教程 (A Byte of Python)pdf下载 下载次数 2884

40  利用Python进行数据分析 pdf下载 下载次数 2884

41  python全自动抢火车票教程-python视频教程下载 下载次数 2883

42  尚硅谷大数据之Hadoop视频 下载次数 2876

43  Python A~B~C~ python视频教程下载 下载次数 2866

44  数据结构与算法视频(小甲鱼讲解-全) 下载次数 2864

45  web小程序表白天数倒计时源码下载 下载次数 2863

46  python基础视频教程 下载次数 2862

47  go语言全套视频 下载次数 2855

48  清华学霸尹成Python爬虫视频-ok 下载次数 2846

49  黑马前端36期最全视频和代码 下载次数 2843

50  2018最新全套web前端视频教程+源码下载 下载次数 2841