【Python 零基础入门】第三课 列表 & 字典

  • 【Python 零基础入门】第三课 列表 & 字典
  • 为什么要学习列表和字典
  • 列表
    • 创建列表
  • 列表增删改查
    • 索引
  • 其他操作
    • 切片操作
    • 合并列表
    • 查找元素
    • 列表常用方法
    • 常见错误
  • 字典
    • 创建字典
    • 查看值
  • 字典操作
    • 访问字典的键值对
    • 获取指定键对应的值
    • 添加键值对
    • 修改字典
    • 键重复
    • 常见错误
  • 列表 vs 字典
  • 列表 & 字典 高级操作
    • 列表 & 字典 推导
    • 嵌套字典
  • 总结
  • 练习
    • 列表基础练习
    • 字典基础练习
    • 列表高级练习
    • 字典高级练习
    • 综合应用
  • 参考答案
    • 列表基础练习
    • 字典基础练习
    • 高级列表练习
    • 字典高级练习
    • 综合应用

【Python 零基础入门】第三课 列表 & 字典

在编程的世界里, 数据结构就像是各种不同的容器,每种容器都有其独特的属性和用途. 在 Python 中, 列表和字典是两种最常用的数据结构. 它们提供了一种高效的方法来组织, 存储, 和操作数据. 本篇文章将为你深入介绍这两大数据结构的核心概念, 常见操作和实际应用.

为什么要学习列表和字典

我们为什么需要列表和字典” />列表

列表 (List) 是一个有序的数据结合. 在 Python 中是一种特殊的变量. 列表可以容纳多个元素, 且元素可为不同的数据类型. 列表允许重复的元素, 且列表的元素可以随时被更改, 添加, 或删除.

创建列表

格式:

列表名 = [元素1, 元素2, 元素3]

例子:

list1 = [1, 2, 3]# 创建由整数型 (int) 构成的数组list2 = ["我是小白呀", True]# 创建包含不同数据类型的数组print(list1, list2)# 调试输出print(type(list1), type(list2))# 调试输出类型

输出结果:

[1, 2, 3] ['我是小白呀', True] 

通过list()函数将其他数据类型转换为列表. 例子:

str1 = "我是小白呀"# 创建字符串对象print(str1, type(str1))# 调试输出list3 = list(str1)# 使用 list 函数将其转化为列表print(list3, type(list3))# 调试输出

输出结果:

我是小白呀 ['我', '是', '小', '白', '呀'] 

列表增删改查

索引

索引 (Index) 是一种特殊的数据结构, 类似于图书的目录. 列表会为其中的每个元素分配一个索引 (index), 从 0 开始向后递推. 通过索引我们可以对列表进行更新, 删除元素, 切片等操作.

例子:

list1 = ["我是小白呀", "王二狗", "李铁柱"]# 创建列表print("索引 0:", list1[0])# 通过索引调试输出元素1print("索引 1:", list1[1])# 通过索引调试输出元素2print("索引 2:", list1[2])# 通过索引调试输出元素3

输出结果:

索引 0: 我是小白呀索引 1: 王二狗索引 2: 李铁柱

格式:

list.append(elmnt)

参数:

  • elmnt: 在数组末尾添加的元素

例子:

# 创建列表list1 = [12, 23, 34, 45]print("原始列表:", list1)# 调试输出# 利用append在末尾添加list1.append(56)print("append后的列表:", list1)# 调试输出# 利用insert添加元素list1.insert(0, 99)# 向列表头插入元素, 99print("insert后的列表:", list1)# 调试输出

输出结果:

原始列表: [12, 23, 34, 45]append后的列表: [12, 23, 34, 45, 56]insert后的列表: [99, 12, 23, 34, 45, 56]

例子:

# 创建列表list1 = [12, 23, 34, 45]print("原始列表:", list1)# 调试输出# 删除索引为0的元素, 即12del list1[0]print("删除元素后的列表:", list1)# 调试输出

输出结果:

原始列表: [12, 23, 34, 45]删除元素后的列表: [23, 34, 45]

例子:

# 创建列表list1 = [12, 23, 34, 45]print("原始列表:", list1)# 调试输出# 修改索引0对应元素的值list1[0] = 0print("修改元素后的列表:", list1)# 调试输出

输出结果:

原始列表: [12, 23, 34, 45]修改元素后的列表: [0, 23, 34, 45]

例子:

list1 = ["我是小白呀", "王二狗", "李铁柱"]# 创建列表print("索引 0:", list1[0])# 通过索引调试输出元素1print("索引 1:", list1[1])# 通过索引调试输出元素2print("索引 2:", list1[2])# 通过索引调试输出元素3

输出结果:

索引 0: 我是小白呀索引 1: 王二狗索引 2: 李铁柱

其他操作

切片操作

格式:

list[起始索引(包含) : 结束索引(不包含)]list[起始索引(包含) : 结束索引(不包含): 间隔]

例 1:

# 创建列表list1 = ["我是小白呀", "王二狗", "张三", "李四", "李铁柱"]print(list1[0:2])# 切片操作print(list1[:2])# 和上一行相同, 省略起始索引

输出结果:

['我是小白呀', '王二狗']['我是小白呀', '王二狗']


例 2:

# 创建列表list1 = ["我是小白呀", "王二狗", "张三", "李四", "李铁柱"]print(list1[::2])# 切片操作, 每2个提取一个元素print(list1[::3])# 切片操作, 每3个提取一个元素

输出结果:

['我是小白呀', '张三', '李铁柱']['我是小白呀', '李四']

重点: 切片后的列表包含起始索引位置的元素, 但是不包含结束索引位置的元素.

合并列表

例子:

# 创建列表list1 = [1, 2, 3, 4]# 创建列表1list2 = [5, 6, 7, 8]# 创建列表2list_combine = list1 + list2# 合并列表print(list_combine)# 调试输出

输出结果:

[1, 2, 3, 4, 5, 6, 7, 8]

查找元素

通过命令in判断列表中是否存在元素.

格式:

元素 in list

例子:

# 创建列表list = [1, 2, 3, 4]# 判断列表是否包含元素print(1 in list)print(2 in list)print(3 in list)print(4 in list)print(5 in list)print(6 in list)

输出结果:

TrueTrueTrueTrueFalseFalse

列表常用方法

列表常用方法:

  • len(): 返回数组长度
  • sort(): 对列表进行排序
  • reverse(): 反转列表
  • count(): 返回指定元素在列表中的数量

例子:

# 创建列表list1 = [1, 2, 5, 3]print("初始数组:", list1)# 获取数组长度print("数组长度为:", len(list1))# 排序list1.sort()print("排序后的数组:", list1)# 反转list1.reverse()print("反转后的数组:", list1)# 获取指定元素数量print("1的数量:", list1.count(1))

输出结果:

初始数组: [1, 2, 5, 3]数组长度为: 4排序后的数组: [1, 2, 3, 5]反转后的数组: [5, 3, 2, 1]1的数量: 1

常见错误

数组下标超出定义范围.

例子:

list1 = [1, 2, 3, 4]print(list1[0])print(list1[1])print(list1[2])print(list1[3])print(list1[4])# list1列表不存在索引4

输出结果:

1234Traceback (most recent call last):File "C:/Users/Windows/Desktop/讲课/第二课/第二课 常见错误1.py", line 6, in print(list1[4])IndexError: list index out of range

字典

字典 (Dictionary) 由键 (Key) 和值 (Value) 组成. 键具有唯一性.

创建字典

格式:

dict = {key1:value1, key2, value2, key3, value3...}

参数:

  • key: 键
  • value: 值

例子:

# 创建字典dict = {"名字": "我是小白哎呀", "年龄": 20}print(dict)# 调试输出print(type(dict))# 调试输出类型

输出结果:

{'名字': '我是小白哎呀', '年龄': 20}

查看值

例子:

# 创建字典dict = {"名字": "我是小白哎呀", "年龄": 20}print(dict["名字"])# 通过键获取对应的值print(dict["年龄"])# 通过键获取对应的值

输出结果:

我是小白哎呀20

字典操作

访问字典的键值对

方法 1, 通过items()命令获取字典键值对:

# 创建字典dict = {"名字": "我是小白哎呀", "年龄": 20}# 方法一for key, value in dict.items():# 输出每个键值对print("键:", key, "值:", value)

输出结果:

{'名字': '我是小白哎呀', '年龄': 20}键: 名字 值: 我是小白哎呀键: 年龄 值: 20

方法 2, 通过键获取对应的值:

# 创建字典dict = {"名字": "我是小白哎呀", "年龄": 20}# 方法二for key in dict:# 输出每个键值对value = dict[key]print("键:", key, "值:", value)

输出结果:

键: 名字 值: 我是小白哎呀键: 年龄 值: 20

获取指定键对应的值

通过dict.get()可以帮我们获取键 (key) 对应的值 (value), 如果指定的键值在字典中不存在, 则返回一个默认值.

格式:

dict.get(key, default=None)

例子:

# 创建字典dict1 = {'a': 100, 'b': 200, 'c':300}# 获取键对应的值print(dict1.get('a'))# 100print(dict1.get('e', 0))# 键 "e" 不存在, 返回 0

添加键值对

例子:

# 创建字典dict = {"名字": "我是小白哎呀", "年龄": 20}print(dict)# 调试输出# 添加键值对dict["职位"] = "纽约Benail CEO"print(dict)# 调试输出'

输出结果:

{'名字': '我是小白哎呀', '年龄': 20}{'名字': '我是小白哎呀', '年龄': 20, '职位': '纽约Benail CEO'}

修改字典

例子:

# 创建字典dict = {"名字": "我是小白哎呀", "年龄": 20}print(dict)# 调试输出# 通过键修改值dict["年龄"] = 18# 小白永远18, 不接受反驳print(dict)# 调试输出

调试输出:

{'名字': '我是小白哎呀', '年龄': 20}{'名字': '我是小白哎呀', '年龄': 18}

键重复

例子:

# 创建字典dict = {"名字": "我是小白哎呀", "年龄": 20, "年龄": 18}print(dict)# 调试输出

输出结果:

{'名字': '我是小白哎呀', '年龄': 18}

注: 当键重复时, 保留最新的值, 作为键值对.

常见错误

键不存在:

# 创建字典dict = {"名字": "我是小白哎呀", "年龄": 20}# 调试输出键对应的值print(dict["名字"])print(dict["年龄"]) print(dict["职位"])# 不存在该键

输出结果:

我是小白哎呀20Traceback (most recent call last):File "C:/Users/Windows/Desktop/讲课/第三课/第三课 字典常见错误.py", line 7, in print(dict["职位"])KeyError: '职位'

列表 vs 字典

列表与字典的比较, 列表和字典都是存储数据重要的工具, 但是他们有不同的用途:

  • 列表: 有序的, 适用于需要按顺序存储的场景, 如任务列表或数字列表
  • 字典: 无序的, 适用于需要通过特定键快速访问数据的场景, 如词汇表或人员数据库

列表 & 字典 高级操作

列表 & 字典 推导

例子:

# 列表推导squares = [x**2 for x in (1, 2, 3, 4, 5)]print(squares)# 调试输出# 字典推导squares = {x: x**2 for x in (1, 2, 3, 4, 5)}print(squares)# 调试输出

输出结果:

[1, 4, 9, 16, 25]{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

嵌套字典

字典可以存储其他字典, 使得复杂的数据结构变得简单.

例子:

# 嵌套字典family = {'father': {'name': 'John', 'age': 45},'mother': {'name': 'Linda', 'age': 43},'child': {'name': 'Sam', 'age': 20}}# 调试输出print(family)# 通过索引查询print(family["child"])

输出结果:

{'father': {'name': 'John', 'age': 45}, 'mother': {'name': 'Linda', 'age': 43}, 'child': {'name': 'Sam', 'age': 20}}{'name': 'Sam', 'age': 20}

总结

列表和字典是 Python 中两个非常强大的数据结构, 它们可以帮助我们有效地组织和处理数据. 选择使用哪一个应该基于你的具体需求.

在这篇博客中, 我们探讨了列表和字典的基础和高级特性, 并通过实际的示例展示了它们的使用方法.

如果你已经理解了这些概念, 并开始在自己的 Python 项目中使用它们, 那么恭喜你, 你已经向成为一名出色的Python程序员迈出了坚实的一步!

感谢你的阅读, 希望这篇文章能对你的 Python 学习之旅提供帮助. 如果你有任何问题或建议, 请在评论区留言. 祝你编程愉快!

练习

列表基础练习

  • 创建一个列表, 包含你的五部最喜欢的电影
  • 向这个列表添加两部你最近看过的电影
  • 根据你的喜好, 对这个列表进行排序
  • 删除你喜好度最低的电影
  • 输出这个列表的第三部和第五部电影

字典基础练习

  • 创建一个字典, 包含你三位最喜欢的作者和他们的代表作
  • 向这个字典添加一位作者和他的代表作
  • 修改其中一位作者的代表作
  • 删除你不再喜欢的作者
  • 输出这个字典的所有作者

列表高级练习

  • 使用列表推导式, 创建一个列表, 其中包含1到10的平方
  • 创建一个新列表, 其中包含上述列表中的偶数
  • 对上述列表进行切片, 输出前三个数字

字典高级练习

  • 使用字典推导式, 创建一个字典, 其中的键是 1 到 5, 值是这些数字的三次方
  • 输出所有键值对, 其中值大于10

综合应用

  • 创建一个字典, 其中的键是你的朋友的名字, 值是一个列表,包含他们的三部最喜欢的电影
  • 输出其中一个朋友的第一部和第三部最喜欢的电影
  • 为其中一个朋友添加一部新的电影

参考答案

列表基础练习

列表基础练习:

"""@Module Name: 列表基础练习.py@Author: CSDN@我是小白呀@Date: October 10, 2023Description:列表基础练习"""# 初始化电影数组movie_list = ["电影1", "电影2", "电影3", "电影4", "电影5"]print("五部最喜欢的电影:", movie_list)# 添加电影movie_list.append("电影6")movie_list.append("电影0")print("5+2 部最喜欢的电影:", movie_list)# 排序movie_list.sort()print("排序后的电影列表:", movie_list)# 删除del movie_list[0]print("删除后的电影列表:", movie_list)# 索引movie_3 = movie_list[2]movie_5 = movie_list[4]print("通过索引找出第 3, 5 部:", movie_3, movie_5)

输出结果:

五部最喜欢的电影: ['电影1', '电影2', '电影3', '电影4', '电影5']5+2 部最喜欢的电影: ['电影1', '电影2', '电影3', '电影4', '电影5', '电影6', '电影0']排序后的电影列表: ['电影0', '电影1', '电影2', '电影3', '电影4', '电影5', '电影6']删除后的电影列表: ['电影1', '电影2', '电影3', '电影4', '电影5', '电影6']通过索引找出第 3, 5 部: 电影3 电影5

字典基础练习

字典基础练习:

"""@Module Name: 字典基础练习.py@Author: CSDN@我是小白呀@Date: October 10, 2023Description:字典基础练习"""# 初始化字典author_dict = {"作者1":"作品1","作者2":"作品1","作者3":"作品1"}print("初始字典:", author_dict)# 添加作者author_dict["作者4"] = "作品1"print("添加后的字典:", author_dict)# 修改字典author_dict["作者4"] = "新作品"print("修改后的字典:", author_dict)# 删除作者del author_dict["作者1"]print("删除后的字典:", author_dict)# 输出所有作者print(author_dict.keys())

输出结果:

初始字典: {'作者1': '作品1', '作者2': '作品1', '作者3': '作品1'}添加后的字典: {'作者1': '作品1', '作者2': '作品1', '作者3': '作品1', '作者4': '作品1'}修改后的字典: {'作者1': '作品1', '作者2': '作品1', '作者3': '作品1', '作者4': '新作品'}删除后的字典: {'作者2': '作品1', '作者3': '作品1', '作者4': '新作品'}dict_keys(['作者2', '作者3', '作者4'])

高级列表练习

"""@Module Name: 列表高级练习.py@Author: CSDN@我是小白呀@Date: October 10, 2023Description:列表高级练习"""# 列表推导式list_square = [i**2 for i in range(1, 11)]print(list_square)# 偶数列表list_even = [i for i in list_square if i % 2 == 0]print(list_even)# 切片sliced_list = list_even[:3]print(sliced_list)

输出结果:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100][4, 16, 36, 64, 100][4, 16, 36]

字典高级练习

"""@Module Name: 字典高级练习.py@Author: CSDN@我是小白呀@Date: October 10, 2023Description:字典高级练习"""# 字典推导式dict_cube = {i:i**3 for i in range(1, 6)}print(dict_cube)# 大于 10 的键值对filtered_dict = {k:v for k, v in dict_cube.items() if v > 10}print(filtered_dict)

输出结果:

{1: 1, 2: 8, 3: 27, 4: 64, 5: 125}{3: 27, 4: 64, 5: 125}

综合应用

"""@Module Name: 综合应用.py@Author: CSDN@我是小白呀@Date: October 10, 2023Description:综合应用"""# 创建字典dict_movie = {"朋友1": ["电影1", "电影2", "电影3"],"朋友2": ["电影1", "电影2", "电影3"],"朋友3": ["电影1", "电影2", "电影3"]}print(dict_movie)# 朋友1 喜欢的第一部和第三部friend1_movie = [dict_movie["朋友1"][0], dict_movie["朋友1"][2]]print(friend1_movie)# 添加电影dict_movie["朋友1"].append("电影4")print(dict_movie)

输出结果:

{'朋友1': ['电影1', '电影2', '电影3'], '朋友2': ['电影1', '电影2', '电影3'], '朋友3': ['电影1', '电影2', '电影3']}['电影1', '电影3']{'朋友1': ['电影1', '电影2', '电影3', '电影4'], '朋友2': ['电影1', '电影2', '电影3'], '朋友3': ['电影1', '电影2', '电影3']}