【零基础高效率学Python】第三天 容器里都有些什么?

本文是一篇针对初学者的Python教程,详细介绍了Python的基础数据类型,包括列表、元组、字典、集合的创建、访问、操作和特性,以及字符串的使用方法。文章强调了这些数据结构的区别和应用场景,为学习Python编程提供了坚实的基础。
摘要由CSDN通过智能技术生成

系列文章传送门:

【零基础高效率学Python】第一天 基础数据类型

【零基础高效率学Python】第二天 程序流程控制

【零基础高效率学Python】第三天 容器里都有些什么?

【零基础高效率学Python】第四天 怎么使用函数

零基础高效率学Python】第五天 Python的模块与包

【零基础高效率学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八进制
cunicode字符x 或X十六进制
e或E科学计数法f或F浮点数(6位小数)
g或G自动在f和e之间切换%%字符(6位小数)

都看到这里了,创作不易,大家点个赞再走呗!!!( ˃̶̤́ ꒳ ˂̶̤̀ )

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祺祺祺有此理

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值