数据容器

根据特点不同

  • 是否允许元素重复
  • 是否可以修改
  • 是否有序

等,可以分为5类列表list、元组tuple、字符串str、集合set、字典dict

列表List

前端OS:中括号,能用索引下标取,是数组!!!

字面量

[元素1,元素2,元素3,元素4]

定义变量

变量名称=[元素1,元素2,元素3,元素4]

定义空列表
1
2
变量名称=[]
变量名称=list()
数据类型

使用type输出类型,结果为<class 'list'>

下标索引

长度为n的列表

正向第一个元素下标是0,最后一个元素下标是n-1

反向第一个元素下标是-1,最后一个元素(也就是第一个元素),索引值是-n

下标索引取值

1
2
3
4
myList=["hello",69,13.14,[36,"world"]]
print(myList[-2]) #13.14
print(myList[0]) #"hello"
print(myList[3][1]) #world
列表操作

查找元素

列表.index(目标元素)index会返回目标元素的下标

如果查找的元素不存在会报错

前端OS:jsindex如果元素不存在会返回-1,但是python中-1也是索引,指的是最后一个元素

插入元素

列表.insert(插入位置,要插入的元素)例如myList.insert(1,"python")

在索引值为1的地方插入’python’,本来在索引值为1的元素会往后移动

如果插入的位置索引超出列表的长度会报错

追加元素

  • 单个元素

列表.append(目标元素)目标元素添加到列表尾部

  • 多个元素

列表.extend(其他元素容器)其他元素容器的内容取出,依次添加到列表尾部

[0,1,2].extend([3,4,5])会把[0,1,2]这个数组变成[0,1,2,3,4,5]

删除元素

  • del关键字

del 目标列表[索引]

  • pop方法

目标列表.pop(索引)

​ 实际上是取出列表中的某个元素,这个方法的返回值是被取出的元素

清空列表

列表.clear()例如myList.clear()

修改元素

  • 修改特定位置的元素(重新赋值)

列表[索引]=要修改的值例如myList[2]="python"

  • 删除某个元素在列表中的第一个匹配项

列表.remove(元素)例如myList[2]="python"

统计元素个数

列表.count(目标元素)统计目标元素在列表中的个数

列表长度

len(列表)统计列表中的元素个数

image-20230828000709418

元组Tuple

一个只读的list,可以储存多种类型的数据,修改其中的元素会报错,但列表作为元组的一个元素,列表内部的值是可以改变的

前端OS:一个不能操作的数组,尤其是作为元组元素的列表内部的值是可以改变的,简直像是const arr=[[1,2,3],4,5,“hello”]

字面量

(元素1,元素2,元素3,元素4)

定义变量

变量名称=(元素1,元素2,元素3,元素4)

定义空元组
1
2
变量名称=()
变量名称=tuple()
数据类型

使用type输出类型,结果为<class 'tuple'>

下标索引

list

元组操作

只支持**index,len(),count(),且使用方法list**

image-20230828002848175

字符串String

前端OS:这就是字符串,嗯

定义变量

str="hello world"

下标索引

可以使用下标索引取值,js中也可以,但我很少去用

字符串操作

image-20230831215523354

序列

序列支持切片

列表,元组,字符串,均支持切片操作

语法:序列[开始位置:结束位置:步长]

可以参数不传,默认值开始位置为数据容器起点,结束位置为数据容器终点,步长默认为1

切片的起始位置默认为 0,即第一个元素的索引为 0。切片操作包括起点,但不包括终点

集合set

列表支持修改,支持重复元素有序

字符串元组 不支持修改,支持重复元素有序

集合最大的特点,不支持重复元素无序(无序就说明,不支持下标索引访问),允许修改

前端OS:出现了!集合!!!

定义集合
1
2
3
test={"string","list","tuple","set","string","set"}
#输出test
#{"string","list","tuple","set"}

定义时元素可以重复

输出时自动去重

集合操作
集合遍历

因为不支持下标索引所以不能使用while遍历

但可以使用for遍历

image-20230831223236393

字典

不支持下标索引,无序key不可重复

使用花括号{},储存键值对key:value

前端OS:我觉得是js里最好用的数据容器了

定义字典
1
2
3
dict1={}
dict2=dict()
dict3={"周杰伦":100,"扁嘴伦":102,"郭艾伦":98}

不允许key重复,同名的key,后面的会覆盖前面的

字典取值

number=dict3["扁嘴伦"]

字典嵌套

字典可以作为字典某一个key的value,来实现字典的嵌套

字典可嵌套,取值可叠加

字典的键(key)可以是以下数据类型:

不可变数据类型:

  • 字符串(string)
  • 数字(integer、float、complex)
  • 布尔值(boolean)
  • 元组(tuple)

内置的哈希类型:

  • 字节串(bytes)

字典的键必须是不可变的,因为字典使用哈希表来实现快速查找和访问。可变的数据类型(如列表)不能用作字典的键,因为它们的哈希值可以发生变化,从而破坏了字典的内部结构。

字典操作

image-20230831225922087

数据容器对比

列表 元组 字符串 集合 字典
元素数量 多个 多个 多个 多个 多个
元素类型 任意 任意 字符 任意 键值对
重复元素 支持 支持 支持 不支持 不支持
下标索引 支持 支持 支持 不支持 不支持
是否只读 只读 只读
使用场景 可修改可重复的数据 不可修改可重复的数据 一串字符串 不可重复的数据 以key检索value,有对应关系
数据容器通用操作

多数数据容器都支持下标索引取值,所以多数数据容器都支持while遍历

数据容器都支持for遍历

数据容器的通用方法len(),min(),max()

数据容器间可以互相转化,注意字典字符串在转换成其他数据容器时会有变化,例如字典转换成列表就只剩key,而丢掉了value

**sorted(数据容器,[reverse=True])**第二个参数默认为False

将数据容器排序按**从小到大的顺序排序,如果第二个参数传True从大到小排序,然后放进列表**里,你懂的,看上面↑

字母的大小取决于他的ascii

image-20230831232707221