大爽Python入门教程 2-1 认识容器
大爽Python入门公开课教案
点击查看教程总目录
1 什么是容器
先思考这样一个场景:
有五个学生,姓名分别为:
Alan, Bruce, Carlos, David, Emma.
需要给他们都打一遍招呼。
即按照以下格式输出一遍
hello, Alan!
hello, Bruce!
hello, Carlos!
hello, David!
hello, Emma!
如果一个一个print,代码重复度太高,且后续每多一个学生,需要跟着增加一行print。
20个学生就需要20行代码,100个学生就需要100行代码,
这样的代码是很糟糕的。
回顾第一章,我们可能能想到使用循环。
但是由于每个学生都有自己的名字,这些名字一般是不同的字符串,
所以不能直接使用第一章学到的for i in range(n)
循环。
那么我们希望怎样一种循环?
我们希望:
有多少个学生,循环就执行多少次,
同时第几次循环中,我们能知道第几个学生的姓名信息。
实际上,
这会被分成两步去实现,
有一个东西,去存放学生的姓名信息。
使用循环,遍历(依次获取)这个东西里面存放的信息。
这样一种能存放其他变量信息的东西,称为容器。
python里面最常用的三种容器:
- 列表(
list
) - 元组(
tuple
) - 字典(
dict
,dictionary)
2 列表list
先回到我们刚才描述的场景,
对这个场景而言,选择列表list
做为容器是最好的。
代码如下
# 首先,新建一个存放学生的姓名信息的容器,容器名为names
names = ["Alan", "Bruce", "Carlos", "David", "Emma"]
for name in names: # 遍历容器:依次获取学生姓名信息
print("hello, %s!" % name)
#
后面都为注释,
运行代码时,注释是不执行的。
注释主要是用来解释说明代码的用意。
方便别人看懂(也方便自己看懂)
列表基础
- 列表用
[]
来表示,内部存放的数据,称为项(item)或者元素(element),不同元素用,
分隔。 - 可以使用
for ... in ...
来遍历列表里面的元素(依次获取全部元素信息) - 列表使用
append(item)
方法来添加新元素 - *列表内部的元素可以是不同的类型,但一个列表通常会存放相同类型的数据(不同类型的数据一般会分开存放)。
- *列表是有序的。
- *列表的类型为
list
。
使用示例
>>> names = ["Alan", "Bruce", "Carlos"]
>>> type(names)
<class 'list'>
>>> for name in names:
... print(name)
...
Alan
Bruce
Carlos
>>> names.append("David")
>>> names
['Alan', 'Bruce', 'Carlos', 'David']
>>> for name in names:
... print(name)
...
Alan
Bruce
Carlos
David
3 场景拓展
更近一步,假设这五个学生的数学成绩分别为:
90, 80, 85, 92, 81.
需要按以下格式展示他们的姓名和成绩,
Alan, your's math score is 90.
Bruce, your's math score is 80.
Carlos, your's math score is 85.
David, your's math score is 92.
Emma, your's math score is 81.
这个问题,有多种解决思路。
4 元组tuple
一种思路是,使用元组作为子容器
把每个学生的名字和分数一起放在一个元组里,
看作每个学生的个人信息,再把每个学生的个人信息(名字和分数组成的元组)放到列表里面。
代码如下
info_list = [
("Alan", 90),
("Bruce", 80),
("Carlos", 85),
("David", 92),
("Emma", 81),
]
for info in info_list:
name, score = info
print("%s, your's math score is %s." % (name, score))
元组基础
- 元组用
()
来表示,内部存放的数据,称为项(item)或者元素(element),不同元素用,
分隔。 - 元组和列表很像,不过元组是不可变对象,创建后不能添加、修改或删除项。
所以一般定义了一个元组,元组元素的数量就是固定的,
所以可以直接用相同的固定数量的变量来承接元组中的项。 - *元组的类型为
tuple
。
使用示例
>>> info = ("Alan", 90)
>>> type(info)
<class 'tuple'>
>>> name, score = info
>>> name
'Alan'
>>> score
90
>>> for item in info:
... print(item)
...
Alan
90
补充说明:一般定义了一个元组,元组元素的数量就是固定的,
所以可以直接用相同的固定数量的变量来承接元组中的项。
其实列表也可以用同等数量的变量来承接列表的所有元素。
但是列表的元素数量是可变的,即数量是不固定的,所以一般不这么做。
一般不用for循环来取元组的值,而是直接用同样个数的变量来取。
5 字典dict
另一种思路是,使用字典作为容器。
那么学生的名字和分数就是一一对应的关系。
代码如下
info_dict = {
'Alan': 90,
'Bruce': 80,
'Carlos': 85,
'David': 92,
'Emma': 81
}
for name in info_dict:
score = info_dict[name]
print("%s, your's math score is %s." % (name, score))
补充说明:原本python的字典是无序的(目前很多老教程也是这么说的),
那么这个输出的顺序不能保证一致,可能是乱的。
不过python3.6以后,字典就改成有序的了(遵循先后顺序,也叫插入顺序),
所以这个输出是完全符合的。
字典基础
字典用
{}
来表示,内部存放键值对,键值对内部用:
分隔键与值,即key: value
,不同键值对用,
分隔。可以使用
for ... in ...
来遍历字典里面的键(依次获取全部键)字典的键的类型,只能为字符串、数字、元组。
字典的键是唯一的,不能重复。
字典的值的类型,可以为任何类型。
字典的键可以是不同的类型,值也可以是不同的类型,但通常,一个字典的键会使用相同类型,值也使用相同类型。
字典通过
dict[key]
来取值,dict[key]=value
赋值(如果key
已存在就是修改值)。
使用示例
>>> info_dict = {
... 'Alan': 90,
... 'Bruce': 80
... }
>>> type(info_dict)
<class 'dict'>
>>> info_dict['Alan']
90
>>> for key in info_dict::
... print(key)
...
Alan
Bruce
>>> for key in info_dict::
... print(info_dict[key])
...
90
80
>>> info_dict['Carlos'] = 85
>>> info_dict
{'Alan': 90, 'Bruce': 80, 'Carlos': 85}
>>> info_dict['Bruce'] = 88
>>> info_dict
{'Alan': 90, 'Bruce': 88, 'Carlos': 85}
6 容器简单比较
上一部分说到过,容器是一种能存放其他变量信息的东西。
实际上,容器存放的是,数据与数据关系。
字典中的数据是对应关系。
列表中的数据是先后顺序关系。
元组中的数据是一个固定的小组的关系。
不同的场景,使用的数据的关系不同,
解决对应需求的容器往往也不同。
大爽Python入门教程 2-1 认识容器的更多相关文章
- 大爽Python入门教程 3-3 循环:`for`、`while`
大爽Python入门公开课教案 点击查看教程总目录 for循环 可迭代对象iterable 不同于其他语言. python的for循环只能用于遍历 可迭代对象iterable 的项. 即只支持以下语法 ...
- 大爽Python入门教程 3-4 实践例题
大爽Python入门公开课教案 点击查看教程总目录 1. 求和 使用循环,计算列表所有项的和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, 11 ...
- 大爽Python入门教程 3-5 习题
大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...
- 大爽Python入门教程 3-6 答案
大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...
- 大爽Python入门教程 2-5 *拓展实践,对比与思考
大爽Python入门公开课教案 点击查看教程总目录 本文偏难. 推荐等第一二三四章上完后,回过来拓展阅读. 基础情景思考 假设有这样一张成绩表 最左边的一列是名字,起名麻烦. 这里直接用ABC...来 ...
- 大爽Python入门教程 3-1 布尔值: True, False
大爽Python入门公开课教案 点击查看教程总目录 1 布尔值介绍 从判断说起 回顾第一章介绍的简单的判断 >>> x = 10 >>> if x > 5: ...
- 大爽Python入门教程 3-2 条件判断: if...elif..else
大爽Python入门公开课教案 点击查看教程总目录 简单回顾if 回顾下第一章的代码 >>> x = 5 >>> if x > 0: ... print(&q ...
- 大爽Python入门教程 2-2 序列: 字符串、元组与列表
大爽Python入门公开课教案 点击查看教程总目录 序列 序列(sequence): 顾名思义,有序的排列. 有序排列的一串数据. 一种容器,容器内成员有序排列. python的字符串str,元组tu ...
- 大爽Python入门教程 2-3 字符串,列表,字典
大爽Python入门公开课教案 点击查看教程总目录 除了通用的序列方法, 列表和字符串还有些自己的专属方法. 后面介绍有些是英中文对照介绍(英文来自官方文档), 便于大家更深入的去理解其意思. 灵活的 ...
- 大爽Python入门教程 2-4 练习
大爽Python入门公开课教案 点击查看教程总目录 方位输出 第一章有一个思考题,方位变换: 小明同学站在平原上,面朝北方,向左转51次之后(每次只转90度), 小明面朝哪里?小明转过了多少圈? (3 ...
随机推荐
- Redis之品鉴之旅(二)
2)hash类型,上代码 using (RedisClient client = new RedisClient("127.0.0.1", 6379, "12345&qu ...
- mybatis: No enum constant org.apache.ibatis.type.JdbcType."VARCHAR"
mybatis 插入的时候一句sql报错如下. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ib ...
- 感恩笔记之SQL查询功能最简使用模板
感恩笔记之SQL查询功能最简使用模板 第一部分:SQL单表功能 1 语句主要关键字 SELECT --查询数据列 INTO --新建数据表 FROM --查询数据表 WHERE --筛选数据表结果 O ...
- Mac里存储空间不足,该怎么删垃圾数据?
说明:在mac设备运行一段时间后,电脑空间很小了,对于开发者来说,清清Xcode缓存,腾出几十G的空间还是有可能的.在升级Xcode适配新系统.新手机也是得给电脑减减压. 一.Xcode缓存文件(co ...
- NLP与深度学习(六)BERT模型的使用
1. 预训练的BERT模型 从头开始训练一个BERT模型是一个成本非常高的工作,所以现在一般是直接去下载已经预训练好的BERT模型.结合迁移学习,实现所要完成的NLP任务.谷歌在github上已经开放 ...
- sqlite3 c++使用以及提高速率(一万条每秒左右)
参考来源: sqlite3的C语言使用(三):https://www.leavesongs.com/C/sqlite3_3.html sqlite插入和查询效率提高方法及测试结果: http://bl ...
- ElasticSearch IK热词自动热更新原理与Golang实现
热更新概述 ik分词器本身可以从配置文件加载扩张词库,也可以从远程HTTP服务器加载. 从本地加载,则需要重启ES生效,影响比较大.所以,一般我们都会把词库放在远程服务器上.这里主要有2种方式: 借助 ...
- iNeuOS工业互联网操作系统,设备振动状态监测、预警和分析应用案例
目 录 1. 概述... 2 2. 系统部署结构... 2 3. 系统应用介绍... 4 4. 专业分析人员... 8 5. 应用案例分享 ...
- NX Open 切削层加载
UF_CUT_LEVELS_load Loads the current cut levels for the specified operation into the data structure ...
- [对对子队]事后总结Beta
设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 要做一个游戏,定义的很清楚,实现出来的效果贴近定义,对用户和场景有清晰描述 我们达到目标了么(原计划的功 ...