三、元组类型及操作
1、元组
- 使用一对圆括号
( )
来存放一组数据,数据项之间用逗号“,”隔开。 - 元组是
不可变数据类型
(immutable),元组数据产生后,其内部元素无法增加、删除和修改。 - 元组中的每个数据项称为一个元素,各元素类型可以相同,也可以不同,也可以将列表或元组作为元组的元素。
可以用多种方式构建元组:
- 使用一对圆括号来表示空元组:
()
- 使用一个后缀的逗号来表示单元组:
a, 或 (a,)
- 使用以逗号分隔的多个项:
a, b, c 或 (a, b, c)
- 使用内置的
tuple() 或 tuple(iterable)
- 元组应用场景
- 不可变性要求:当需要确保数据的不可变性或确保某些数据不被修改,使用元组
- 函数的参数和返回值:可变参数被包装成元组传入函数,将多个返回值打包成一个元组并从函数中返回。
四、列表类型及操作
1、列表
- 使用一对方括号
[ ]
来存放一组数据,数据项之间用逗号“,”隔开。 - 列表是
可变数据类型(mutable)
,数据产生后,其内部元素可以增加、删除和修改。 - 列表中的每个数据项称为一个元素,元素的数据类型无限制,元素类型可以相同,也可以不同。
- 将用方括号“[]”括起来的一组数据,数据可以是多个,也可以是0个,数据个数为0时创建一个空列表。
- 可以用多种方式构建列表:
- 使用
list()
函数,将元组、range对象、字符串、字典的键、集合等可迭代对象类型的数据转换为列表,当参数为空时生成一个空列表。 - 使用
split()
函数将一个字符串按指定特符切分后,转为列表。 - 使用
列表推导式
:[x for x in iterable]
- 使用
适用于各种处理多种数据的场景,使用最广泛最灵活的序列类型!
2、列表元素更新
- 索引赋值的方法
ls[i] = a
,要求i为整数且在列表序号范围内
- 切片赋值的方法
ls1[i:j] = ls2
, 要求新值也为列表,
- 连续切片时,新值元素与切片元素数量可不相同,新值类型可与原值类型不同
- 切片不连续时新列表与切片元素数量相等,按顺序一一替换,新值类型可与原值类型不同
- 通过列表方法更新:原地操作,直接改变原列表,无新对象产生,无返回值,列表的id不改变
- ①
ls.append(x)
方法,向列表末尾追加一个元素x,ls为操作的列表名,x为增加的元素
- ②
ls.extend(lt)
方法,将新列表lt中的元素追加到列表ls末尾,相当于ls = ls + lt
- ③
ls.insert(i,x)
方法,向列表 ls 中序号 i 处插入一个元素 x
3、列表元素删除
ls.pop([i=-1])
:返回列表ls下标为i的元素,并将其从ls中移除,i默认值为-1,省略时移除最后一个元素,唯一能删除列表元素又能返回值的列表方法
ls.remove(x)
:删除列表中第一个与参数“x”值相同的元素,存在多个与 “x”值相同元素时,只删除第一个,无返回值。列表中不存在与参数“x”相同元素时,抛出异常(出错)
ls.clear()
:删除列表中全部元素, (等同于 del ls[:] )。
命令del
:删除列表中通过索引或切片指定的元素。
区分:del ls[:]
为清空列表元素,列表存在但空;del ls
为彻底销毁ls变量
4、列表元素排序
ls.sort(*, key=None, reverse=False)
:对列表 ls 中的数据在原地进行排序
- 默认升序,当reverse=True时降序
- key指定排序时应用到每个参与排序元素上的规则
-
ls.reverse()
:不比较元素大小,直接将列表ls中的元素逆序
ls.sort()和ls.reverse()都不创建新对象,原地操作,无返回值
-
sorted(iterable, *, key=None, reverse=False)
- 对所有可迭代变量iterable中数据排序,返回一个新的排序后的列表
- 参数key和reverse用法与
ls.sort(*, key=None, reverse=False)
相同
5、列表处理方法总结
例5: 列表元素的查找和添加
第一步:确定IPO
- 输入:输入为一行,是一句英文,单词之间以一个空格分隔(单词个数大于或等于0)
- 处理:
- 将句子按空格分成列表,列表中包括所有单词
- 判断句子中是否有and?
- 有and,使用序列通用方法s.index()找到字符串and在列表中的下标i(注意,列表没有l.find()方法)
- 使用列表特有方法list.insert(i)在位置 i 插入元素‘Anna’
- 处理完后的列表再转换成单词之间带空格的字符串
- 输出:如果输入句子里有“and”,在and前插入Anna后输出该句子,各单词之间以一个空格分隔
- 如果输入的句子里没有单词“and”,则输出原句。
6、列表推导式
-
推导式(comprehensions)又称解析式,可以从一个数据序列构建另一个新的数据序列的结构体。
-
推导式是Python的一种独有特性
-
可以将其理解成一种集合了变换和筛选功能的函数,通过这个函数把一个序列转换成另一个序列。
-
列表推导式由1个表达式跟一个或多个for 从句、0个或多个if从句构成。
[x 表达式 for x in 列表 if 条件表达式]
-
for前面是一个表达式,in 后面是一个列表或能生成列表的对象。
-
将in后面列表中的每一个数据作为for前面表达式的参数,再将计算得到的序列转成列表。
-
if是一个条件从句,可以根据条件返回新列表。
例:计算0-5中每个数的平方,存储于列表中输出,可以用以下方法实现
列表推导式实现
例6:合法IP地址转换
第一步:确定IPO
- 输入:一个32位的二进制字符串
- 处理:
- 对字符串进行分隔,每8个二进制对应一个十进制数,二进制怎么转换成十进制?
10110 = 0*2**0+1*2**1+1*2**2+0*2**3+1*2**4
int('10110',2)
使用int函数,将二进制字符串,转换为十进制整数。参数2表示字符串是二进制
- 对分隔后的8位二进制转换为十进制,执行4次,得到4个十进制数
- 将得到的4个十进制数中间用“.”分隔开连接成一个字符串
- 对字符串进行分隔,每8个二进制对应一个十进制数,二进制怎么转换成十进制?
- 输出:输出其十进制格式的IP地址
- 优化代码—循环提取二进制并转换
- 优化代码—列表推导式,将上面循环生成十进制并存入列表的过程在列表中生成
7、内置函数
map(function, iterable, ...)
函数- 可以将函数作用于可迭代对象中的每一个元素,返回一个可迭代对象。
- 第一个参数是一个函数,如int,float,str等
- 第二个参数量是一个可迭代对象,如列表等
- 简单理解为,将对列表或其他可迭代对象的每个元素自动被前面的函数处理后得到新的对象
例7:统计学生平均成绩与及格人数
第一步:确定IPO
- 输入:在一行中给出n个非负整数, 多个数字用空格分开输入为一整个字符串
- 处理:
-
要计算多个整数的平均值,统计大于60的个数,要将一行字符串中所有数字提取出来
-
执行过程,input()获取输入,.split()将字符串按分割成列表,map()对列表中的每个元素带入int()函数,通过list将结果转换为一个列表。
-
sum()函数可以直接对列表中可求和元素求和,通过len()获取成绩个数,相除求平均值
-
通过列表推导式,删选分数大于60分的成绩,并保存在新列表中,统计新列表中的元素个数
-
- 输出:按照以下格式输出:
- average = 成绩均值
- count = 及格人数
第二步:编写代码
整理不易🚀🚀,关注和收藏后拿走📌📌欢迎留言🧐👋📣✨
快来关注我的公众号🔎AdaCoding 和 GitHub🔎 AdaCoding123