第六章:python的内置数据结构
一.什么是内置数据结构?
- 数据结构是一个很大的概念,这里简单描述为 计算机组织和存储数据的方式.
- 更通俗易懂的来理解,可以把数据比作居民,对于不同小区,不同户型就是不同的结构,房子作为组织数据的结构,居民为数据.
- 例如:一室一厅住一个人,两室一厅住两个人就好比两种数据结构,一种是存放一个数据,另一种是存放两个数据.
- 居民和房子看做一个整体组成一种数据结构,住在树上的原始人,山顶洞人也各为一种数据结构.
- 那么内置数据结构就是官方已经准备好的数据结构,可以直接拿来用的.各种编程语言都有提供这些.
- 如java中的array,list,map等,python为我们提供了4种经常用并且很有用的数据结构:列表,元组,集合,字典.
二.内置数据结构的演示
列表
- 用来存储一组有序数据元素的数据结构,元素之间用逗号分隔.(每一个数据都称为一个元素)
- 列表中的数据元素应该包括在方括号中 [ ].
- 列表是可变的数据类型(创建之后可以对其元素进行改变), 一旦创建了一个列表,可以添加, 删除或者搜索列表中的元素.
- 列表中的元素不必是相同的类型.
- 如果只有一对方括号而没有任何元素则表示空列表.

等号 = 直接将创建的列表赋值给变量:

使用type()查看列表的类型:

对列表的操作与字符串很类似.
列表也可以像字符串一样与一个数字相乘,实现复制功能:

列表获取指定位置的元素和字符串是一致的,主要有普通索引和截取两种.
普通索引是获取某一特定位置的元素:

按索引截取,操作同字符串一样,但截取的结果是一个列表:

与字符串不同的地方是字符串无法通过指定位置修改该位置的内容.
尝试修改字符串的内容,程序会报错:

而列表可以:

列表常用的函数(官方所提供的)
函数名称 | 函数说明 |
---|
append() | 在列表尾部追加新的元素 |
count() | 统计元素在列表中出现的次数 |
extend() | 在列表末尾一次性追加另一个序列中的多个值 |
insert() | 将对象插入列表中 |
pop() | 移除列表中的一个元素,并返回该元素的值 |
reverse() | 对列表中的元素反向存储 |
sort() | 对列表进行排序 |
index() | 在列表中找出某个值第一次出现的位置 |
remove() | 用于移除列表中某个值的第一个匹配项 |
len() | 返回列表元素个数 |
max() | 返回列表元素中的最大值 |
min() | 返回列表元素中的最小值 |
对这些函数进行简单的演示:
创建列表并使用append()函数为列表尾部追加元素:

使用count()函数查看指定元素的个数:

使用extend()函数可以将另一个列表直接拼接到当前列表尾部,类似字符串的 + 号(一般可迭代对象都可以这样用,以后会说迭代器):

在指定位置插入元素用 insert():

通过pop()函数删除元素并返回这次删除的元素,默认删除了列表最后一个位置的元素.也可以在括号指定索引:

通过指定索引删除时,会发生越界问题:

想要指定元素进行删除可以使用remove()函数:

清除整个列表的元素可以使用clear()函数:

对列表的元素进行排序可以用sort()函数:

反向排序:

获取一个元素在列表中第一次出现的位置用index():

获取列表中元素的个数用len():

max()和min(),分别是求最大值和最小值,在很多地方都有用:

元组
- 元组是序列数据结构的另一个重要类型,元组与列表非常类似,唯一的不同是元组一经定义,其内容就不能修改(不可变类型).
- 从形式上,元组的所有元素放在一对括号中,元素之间使用逗号分隔,如果元组中只有一个元素则必须在最后增加一个逗号.
- 元组的创建非常简单,可以直接在一对括号中用逗号分隔来创建一个元组:

元组内元素的获取方法主要分为普通索引和截取两种:
普通索引,同列表一样:

按索引截取的结果也是一个元组:

元组是不可变类型,同字符串:

max(),min(),len()同样适用于元组:

查找元素位置的index()也可以用:

"但是增删改,插入之类的操作不适用于元组,因为元组是不可变的."
集合
- 集合(set)属于python数据结构中的无序可变序列,使用一对大括号作为定界符,元素之间使用逗号分隔.
- 同一个集合内的每个元素都是唯一的,元素之间不允许重复.
- 集合中只能包含数字,字符串,元组等不可变类型的数据;而不能包含列表,字典,集合等可变类型的数据.
- 创建一个集合在{ }中用逗号将各个值,分隔开来就行了.
可以看出输出顺序和添加顺序不一致,说明集合是无序的(看起来输出是有序的,但也仅限于看起来,集合中的元素是没有索引的).
因为集合没有顺序,因此不能使用索引访问元素.另外也不能通过索引删除元素:

集合中每个元素都是唯一的:

集合是可变数据类型,虽然无法通过索引添加,删除里边的元素,但是可以通过add()函数添加一个元素,具体添加的位置是python帮我们选的:

通过remove()函数删除指定元素:

要想元素不存在时执行删除不会报错,可以使用discard():

pop()函数是随机删除一个元素:

clear()函数同样可以用来清空一个集合(很多类似的通用函数,大家要敢想,去尝试,就会发现新大陆):

上面演示并没有用 { }空大括号创建集合,因为这样并不是一个集合,而是下面要说的字典(dict):

字典
- 字典是包含若干“键:值”元素的无序可变序列,字典中的每个元素包含用冒号分隔开的“键”和“值”两部分,表示一种映射或对应关系,类似于通过联系人姓名查找地址和联系人详细情况的地址簿,即把键(名字)和值(详细情况) 联系在一起.
- 定义字典时,每个元素的“键”和“值”之间用冒号分隔,不同元素之间用逗号分隔,所有的元素放在一对大括号“{}”中.
- 字典中元素的“键”的类型必须是python的不可变类型,例如数字类型,字符串类型,元组类型等;但不能使用列表,集合,字典或其他可变类型作为字典的“键”.
- 另外,字典中的“键”不允许重复,而“值”是可以重复的.
建一个空字典,用{ },集合不能这么做,虽然他俩都是用大括号作为定界符:

向字典中新添值:

另一种形式:

访问字典的值要通过键:

修改对应键的值:

删除 ''键值对'' 用 popitem()函数默认从最后删,pop()函数则是删除指定键的键值对,要删的键不存在会报错:

keys() 和 values() 分别获得所有键和所有值:

同样可以len() (- _ -!):

常用的函数大概就这些,如果想了解所有内置函数,官方文档有详细说明.(之前第二章有提到过文档在哪)

工厂函数
涉及到类的知识了,先会用就行.
通过四种内置结构的工厂函数创建对应的空结构:

结构间的转换
通过list()函数,把字符串转换成列表,字符串本质上也是一种内置结构:

也可以把元组转换成列表:

还可以把集合转换成列表:

可以将字典的 ''键'' 转换成列表:

tuple()将其他类型转为元组:

set()将其他类型转为集合,重复的值只会出现一次:

结构嵌套
结构是可以嵌套使用的,也就是一些结构可以作为另一个结构的元素,被包含的结构会作为一个元素存在.
列表包含列表:

列表包含元组:

元组也可以嵌套列表:

把嵌套元组或嵌套列表转换成字典:

这样写太麻烦了,工厂函数dict还提供了一个简单形式:

del关键字
- 创建的东西使用完,可以使用del删除他们,这一点适用于所有类型的python对象.
- 对象到底是什么以后再说,现在只要知道,我们创建出来的数字,字符串,布尔值,内置结构等等都是对象即可.


del对列表和字典有特殊的用法,del可以通过列表指定的索引删除对应位置的元素:

del可以通过字典的键删除对应的键值对:

这四种内置数据结构有很多共同点,不同点,是方便记忆的突破口.
同时挖了很多坑,以后会填上.
如有错误还望指出
允许转载但请注明出处