系列文章传送门:
【零基础高效率学Python】第五天 Python的模块与包
文章目录:
一、容器的概念
二、列表(list)
三、二维列表
四、元组(tuple)
五、字典(dictionary)
六、集合(sets)
七、列表、元组、字典、集合的区别
八、字符串(str)
一、容器的概念
(一)python中可以包含其它对象的对象,称之为‘容器’,是一种数据结构
(二)常用的容器:序列(列表、元组),映射(字典)
二、列表(list)
(一)概念:将多种数据类型使用逗号分割后放置在中括号中的一组可变序列
(二)创建列表
1、格式:listname=[元素1,元素2,元素3,……元素n]
- listname:列表名,必须符合标识符命名规则
- 元素:列表项,个数无限制,可以为任意合法的数据类型
2、注意
list()函数用于生成列表或类型转换,其中内容必须为可迭代对象,若为不可迭代的对象则报错;将列表转换为列表无意义且浪费资源。
(三)删除列表
- 格式1:del listname
- 格式2:listname.clear() ,清空列表中的内容,框架还存在
(四)通过索引访问列表
- 作用:在序列中每一个元素都有一个唯一的编号(下标),用于访问操作
- 原则:由左向右从0开始递增,也可以由右向左从-1开始递减
- 引用:listname[索引] ,例:team[0] ,team[-1]
- 注意:空列表时不可以通过索引引用
(五)列表输出:print(列表名)
(六)列表的切片
- 作用:通过列表切片操作可以访问一定范围的列表元素,也可以生成新列表
- 格式:listname[start : end : step]
start: 切片开始的索引(包含),若省略则为0
end:切片截止的索引(不包含),若省略则为整个列表长度
step:切片长度,若省略则为1,step省略则最后一个冒号也可以省略,若为负值则由由向左反向切片
(七)列表的相加
- 作用:将相同类型的序列进行连接操作,但不会去除重复值
- 符号:+
- 注意:列表不能与字符串常量进行连接吗,否则报错
(八)列表的相乘
- 作用:使用数字乘以一个列表相当于进行复制
- 符号:*
(九)列表包含与不包含检查
- 作用:检查某个列表是否包含某数值
- 格式:value in listname 或者 value not in listname
(十)常用的列表的函数
- 计算列表长度:len(listname)
- 计算列表最大值:max(listname)
- 计算列表的最小值:min(listname)
- 计算列表元素之和:sum(listname)
(十一)列表遍历
- 处理数值:
for item in listname: 处理item
- 处理索引与数值
for index,item in enumerate(listname): 处理 index 和 item
(十二)列表中添加元素
- 尾部追加:listname.append(obj)
- 整体追加:listname.extend(obj)
- 指定位置插入新元素:listname.insret(obj)
(十三)删除元素
- 根据索引删除:del listname[index]
- 根据内容删除:listname.remove(obj)
if t1.count(n) > 0: # 先判断元素是否存在
t1.remove(n)
(十四)列表统计
-
格式:listname.count(obj)
-
作用:获取列表中某元素出现次数,只能精确匹配,count()一般与remove()配对使用
(十五)列表的排序
1、sort()方法排序
-
格式:listname.sort(key=None , reverse=False)
-
key:元素排序时比较的键
-
reverse:排序规则,Ture为降序,False为升序,默认为升序
-
注意:sort()内置方法会改变列表的值,返回值为None
2、使用内置函数sorted()排序,可以不改变列表的值进行排序
-
格式:sorted(listname , key=None , reverse=False)
(十六)列表查找
1、index()方法:用来查找某个元素在列表中第一次出现的位置(索引值),若该元素不存在则会导致异常,最后使用count()方法进行判断
-
格式:listname.index(obj, start , end)
-
obj:查找的元素
-
start:起始位置
-
end:结束位置(不包含)
-
返回值为索引
2、使用in 和 not in 查找列表元素
3、使用二分法查找列表元素(折半查找),要求列表必须有顺序则必须先排序
(十七)列表倒置:格式:listname.reverse()
(十八)列表元素组合
1、作用:将列表元素组合成一个字符串
2、格式:char.join(seq)
-
char:是组合后的分隔符
-
seq:表示处理的对象,必须为列表、元组等序列元素
(十九)列表的浅拷贝与深拷贝
分析:列表的赋值相当于取别名,即两者名称都指向同一个堆栈区地址列表对象,操作任意一个,另一个同步变化
1、列表浅拷贝
- 分析:list2是列表list1的浅拷贝结果,id值与list1列表不同,这是因为通过浅拷贝时会产生一个新的地址列表与list2绑定,与list1地址列表完全不同,地址不同相互隔离。
- 注意:列表中有可变数据类型进行浅拷贝时无效。
- 分析:list1列表有2个不可变的数据元素1和2,其进行改变并没有影响list2,但list1中可变元素[3,4]若改变则list2也会随之改变,list1与list2并没有完全隔离开来,虽然list1与list2的内存总的地址列表项相互独立但列表第三项绑定了同一个字列表,不能实现完全的地址隔离,若需要完全独立则需要深拷贝。
2、列表深拷贝
- 分析:通过深拷贝,列表进行隔离,从实现与原列表真正的完全隔离
(二十)列表推导式
-
作用:使用列表推导式可以生成新列表
-
格式:listname=[表达式 , for 循环变量 in range() ]
三、二维列表
(一)创建二维列表
-
创建格式1:listname=[[一维列表1],[一维列表2],[一维列表3],……,[一维列表n]]
-
创建格式2:for循环创建
-
创建格式3:列表推导式创建(常用)
(二)二维列表局部处理 : 只能处理行==列的正方形二维列表
-
左下半三角元素,行>列
-
右上半三角元素,行<列
-
主对角线,行=列
-
副对角线,j=行-i-1
(三)二维列表的周边元素处理
四、元组(tuple)
(一)概念:元组(tuple)是一种使用园括号括起不可变数据类型元素集合
(二)注意:元组中元素个数与值不可以改变,又称为不可变列表
(三)元组中不允许的操作
-
修改、增加元素
-
删除元素(但可以整体删除元组)
-
如:remove、append、insert、pop等方法不可使用
(四)创建元组
-
格式:tuplename=(元素1,元素2,元素3……,元素n)
-
元素个数无限制、类型可以都不相同
(五)整体删除元组
-
注意:元组是不可变序列,存储的元组不可删除,但允许整体删除元组==
-
格式:del tuplename
(六)注意
1、元组只保证一级子元素不可变,对于嵌套的元素,不保证不可变
2、元组支持列表的相关操作,但注意以下问题
-
元组连接(+)时必须维持类型还是元组,即连接对象不能是字符串或列表
-
元组连接只有一个元素的元组时,必须加逗号
(七)元组切片
- 切片与列表操作方式相同
- 元组的方法与函数与列表基本相同,更改内部元素的方法与函数都不可用
(八)元组与列表数据互换
-
list():转为列表的函数
-
tuple():转为元组的函数
注意:可以将元组转为列表进行插入删除等操作,在转为元组,间接实现‘修改’元组
(九)元组与列表区别
1、相同点
- 元组与列表都属于序列,都可以按照特定的顺序存储一组数据,类型不受限制
- 元组与列表一样支持切片操作
2、区别:
-
列表为可变序列,元素可以任意删除、修改、插入
-
元组为不可变序列,元素不能做上述操作
-
元组不支持:append(),extend(),insert(),remove()等方法
3、元组的优点
- 元组比列表结构简单、占用资源少,能保护数据不被意外删除,比列表安全性要高
五、字典(dictionary)
(一)概念
字典属于可变序列,使用“键:值(key:value)”的方式==配对==存储数据,类似于新华字典中“拼音:汉字”之间的映射关系
(二)格式
dictionary={key1:value1 ,key2:value2,……,keyn:valuen}
-
dictionary为字典名称
-
字典使用花括号{}作为标志
-
key为元素的键,必须唯一,且不可变,可以是字符串、数字、元组
-
value:元素的值,可以为任意数据,不需要唯一
(三)创建字典
- dict1 = {'andy': 1001, 'fox': 1002, 'alice': 1003}
- dict2 = {} # 创建空字典
- dict3 = dict() # 函数初始化为空字典
(四)字典访问
-
格式:dictname[键]
-
dict1 = {'name': 'zara', 'age': 18, 'class': 'first'} print(dict1['name'], dict1['age'], dict1['class'])
-
通过key访问value
(五)字典元素增加
-
格式:dictname[键]=值
(六)字典删除
-
删除特定元素:del 字典名[键]
-
清空字典内容:dictname.clear()
-
整体删除字典:del 字典名
(七)使用get()方法获取指定的值
-
格式:dictname.get(key, default)
-
key:指定键
-
default:可选,用于指定键不存在时返回的默认值,若省略则返回None
(八)字典遍历
1、格式1:items()方法:返回(键:值)数据对
- for i in dictname.items():
- 处理i
2、格式2:键:值方法
- for key ,value in dictname.items():
- 处理key和value
3、格式3:keys():返回字典所有的键
values():返回所有的值
(九)字典的fromkeys()方法
-
作用:建立字典的一种字典内置方法
-
格式:newdictname=dict.from.keys(seq,value)
-
seq:建立的字典列表,默认为键
-
value:字典的值,若省略为None
六、集合(sets)
(一)概念
集合是一种无序不重复的元素集。
(二)功能
一般用于去重和关系测试
(三)集合使用花括号进行括起
(四)创建集合
格式:setname={元素1,元素2,……元素n}
set1 = {1, 2, 3, 4, 5, 6}
set2 = {'name', 'num', 'age', 'score'} # 集合本质为无序可变序列,输出时可能顺序不
set3=set('命运给与我们的不是失望之酒,而时机会之杯')
set4=set([1,2,3,4,5,6,7,8,9])
set5=set() # 空集合,不能使用{}
set6=set(('apple',)) # 创建只有一个元素的集合,需要加逗号
(五)集合的应用核心:去重
(六)集合的添加与删除
1、添加元素:setname.add(元素)
2、删除元素:
-
setname.remove(元素): 删除指定元素
-
setname.pop():随机删除一个元素
-
setname.clear() :清空内容
(七)集合交并差集
-
交集:&
-
并集: |
-
差集: -
-
对称差集: ^ , 排除共同部分
(八)子集和父集
-
issubset():测试是否为子集,返回True或False
-
issuperset() : 测试是否为父集,返回True或False
(九)集合追加到另一个集合:update():将一个集合追加到另一个集合
(十)删除集合内与另一个集合重复的元素:difference_update()
(十一)冻结集合
概念:set是可变集合,使用frozenset可以改变集合为不可变序列,即冻结集合,定义好之后不允许修改,可以参考元组
(十二)查看集合内置方法:print(dir(set))
七、列表、元组、字典、集合的区别
数据结构 | 是否可变 | 是否重复 | 是否有序 | 定义符号 |
---|---|---|---|---|
列表(list) | 可变 | 可重复 | 有序 | [ ] |
元组(tuple) | 不可变 | 可重复 | 有序 | ( ) |
字典(dictionary) | 可变 | 可重复 | 无需 | {key:value} |
集合(set) | 可变 | 不可重复 | 无序 | { } |
八、字符串(str)
(一)概念:字符串是由‘和“包裹起来的任意不可变文本序列
(二)拼接字符串:+
(三)多行字符串
-
字符串多余一行时,可以使用三引号(三个双引号)将字符串包夹起来
(四)字符串切片
-
原则:字符串属于不可变的序列,可以通过切片操作截取字符串
-
格式:string[start , end ,step]
(五)分割合并字符串
1、分割字符串:将字符串分割为列表
格式:strname.split(sep,maxsplit)
-
sep:指定的分割符,可以包含:空格 \t \n None ,
-
maxsplit:指定分割次数,若省略则为1
2、合并字符串:将多个字符串采用固定的分隔符进行连接
格式:newstrname=string.join(iterable)
-
newstrname:合并之后的新字符串
-
string:合并的固定分隔符
-
iterable:可迭代对象,即要合并字符串
(六)字符串查找
1、count()方法
-
作用:检索字符串在另一个字符串中出现的次数,若不存在则返回0
-
格式:strname.count(sub) sub:要检索的子串
2、find () 方法
-
作用:检索是否包含指定字符串,若不存在则返回-1,若存在则返回首次出现的索引值
- 注意:find()方法一般用于查找子串在主串中是否出现,也可以使用in实现,如:print(sub in str1 ) 返回True ,python还提供rfind()即从右侧开始进行检索
3、startswitch()方法:检索字符串是否以指定的字符串开头,是则返回True,否则返回False,格式:strname.startswitch(sub)
4、endswitch()方法:检索字符串是否以指定的字符串结尾,是则返回True,否则返回False,格式:strname.endswitch(sub)
(七)字符串大小写转换
-
大写转小写:strname.lower()
-
小写转大写: strname.upper()
-
大小写互换:strname.swapcase()
(八)判断是否为字母
格式:strname.isalpha() ,成立返回True,否则返回False
(九)字符串删除
-
strname.strip(char) : 删除字符串左右两边的指定字符
-
strnamne.lstrip(char) : 删除字符串左侧指定字符
-
strname.rstrip(char) : 删除字符串右侧指定字符
(十)字符串替换
格式:strname.replace('...','...')
(十一)通过format()方法实现模板输出
1、格式:strname.format(args)
-
args:需要转换的部分,如有多项需要使用逗号进行间隔
2、模板格式:{index : fill align sign # width.precision type}
占位符:{} 和 :
参数:
-
index:索引位置,从0开始,若省略则自动分配
-
fill : 空白处填充的字符
-
align:设置的对齐方式,一般与width配合使用
-
< : 左对齐
-
>: 右对齐
-
=:内容右对齐,只针对数字类型,即将数字类型内容放在填充字符的最右侧
-
^ : 内容居中
-
-
sign:指有无符号
-
+:正数加正号,负数加负号
-
-: 正数不变,负数加负号
-
空格:正数加空格,负数加负号
-
-
# :值为二、八、十六进制数会显示0b 、0o、0x前缀
-
width:宽度
-
.precision: 保留小数位数
-
type:指定类型
3、常见格式化字符:
格式化字符 | 作用 | 格式化字符 | 作用 |
---|---|---|---|
s | 字符串 | b | 二进制 |
d | 十进制 | o | 八进制 |
c | unicode字符 | x 或X | 十六进制 |
e或E | 科学计数法 | f或F | 浮点数(6位小数) |
g或G | 自动在f和e之间切换 | % | %字符(6位小数) |
都看到这里了,创作不易,大家点个赞再走呗!!!( ˃̶̤́ ꒳ ˂̶̤̀ )