首先大家看到数据结构,想到了什么呢,对,我们第一要先思考数据机构是什么?用来干什么?有什么样的作用,那我将逐个来搜索答案,进一步清晰了解它
数据结构是什么:
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
用我自个的白话组织:数据结构是让我们可以对数据存储和管理的一种手段,具体让我们可以对数据可存可取可删可查可添等操作,就是一个小型的数据库。
大家现在应该跟我一样简单认识到数据机构,那接下来我们是可以回复数据结构是用来做什么的了,简单来说:
数据结构就是一种工具,一种手段,在计算机里,用其工具或者说是手段以达到对数据进行我们想要的管理以及操作,就如同我们吃饭喝水需要借助筷子和杯子等工具。
其有什么样的作用,相信大家跟我一样都有自己的认识了,既然很形象的比拟成了工具跟手段,那么就其作用就是让我们更好的对简单数据进行管理和操作,就如同没有筷子跟杯子,你就只能手抓/嘴舔,这里就不皮了,主要是让我们更好的理解它。
那么我们现在就要了解和学习Python中有哪些数据结构?这些数据机构又有哪些基本操作?
Python中数据机构有列表list、元组tuple、字典dict、集合set等,这里我们就只了解python中内置的数据结构,下面我会从其定义以及特征和其基本操作来详细说明:
列表list
定义:由一系列变量组成的可变序列容器(这里我把它们统称为可以存储数据的容器)
特征:
1.列表是可变的,意味着列表可以进行修改和删除;
2.列表是有序的,每个元素都可以用索引定位,可以用索引去访问每个元素;
3.列表中存储的对象是变量,即为可以存储python中任何数据类型;
基本操作:
1.创建列表
第一种:list01 = [2,None,"hello world",True,[2,3],(2,3)]
第二种:list02 = list(以上四种容器数据)
详细说明:第二种创建列表方法,里面参数可以是所有容器,如果是字典,返回是字典键的列表,如果要想返回完整的列表键值对列表则需要外嵌套除开字典的容器,具体外嵌套什么容器,根据需求而定。这里你会发现返回结果都将是列表数据类型,这样一来list()就可以成为一种数据类型转换成列表数据类型的方法,衍生一下,其他的数据结构名都能作为相应转换数据类型的方法。
2.添加元素
第一种追加:append(元素)
list01 = [1,2,3]
result_list = list01.append(4)
print(result-list)
返回结果:[1,2,3,4]
详细说明:append()方法只可以添加一个元素
第二种插入:insert(索引值,元素)
list01 = [1,2,3]
list01.insert(2,4)
print(list01)
返回结果:[1,2,3,4]
详细说明:insert()里面的第一个参数是索引值,特别强调的是可以超出原有列表的索引值范围,并指定为在末尾追加元素
第三种末尾追加另外三种容器以及字符/字符串:extend(list/dict/set/str)
list01 = [6,7,8]
list01.extend([9,10,11])
返回结果:[6,7,8,9,10,11]
详细说明:参数是另外三种容器的数据以及字符/字符串,如果添加是字典,那么追加在后面的元素是字典的键,如果想把字典的键值对都添加进去,可以在字典外根据需求嵌套其他三种容器,不能添加数字数据类型(int、float、complex)。
3.删除元素
第一种根据切片删除:del 列表名[切片]
list01 = [1,2,3]
del list01[1:]
print(list01)
result :[1]
第二种根据索引删除元素:del 列表名[索引值]
list01 = [1,2,3]
del list01[1]
print(list01)
result: [1,3]
第三种根据元素删除元素:remove(元素)
list01 = [1,2,3]
list01.remove(2)
print(list01)
result:[1,3]
第四种根据索引值删除元素:pop(索引值)
list01 = [1,2,3]
list01.pop(1)
print(list01)
result:[1,3]
详细说明:pop()不给参数时,被调用时默认删除列表最后一个元素
4.修改元素
第一种根据切片添加:list[1:2] = 元素/其他三种容器数据
list01 = [1,2,3]
list01[1:2] = [1,2,3]
print(list01)
返回结果:[1,1,2,3,3]
详细说明:这里切片的范围,就是你想修改元素的索引范围或者是定位某个元素
第二种根据索引值修改:列表名[索引值] = 元素
list01 = [1,2,3]
list01[2] = 4
print(list01)
result:[1,2,4]
5.遍历元素
list01 = [1,2,3,4]
for item in list01:
print(item,end=" ")
result:1 2 3 4
6.提取元素
利用切片提取元素
list01 = [1,2,3]
result_list = list01[1:]
print(result_list)
result:[2,3]
7.排序列表
第一种升序:列表名.sort()
list01 = [1,6,3]
list01.sort()
print(list01)
result:[1,3,6]
第二种列表反转:列表名.reverse()
list01 = [1,5,4]
list01.reverse()
print(list01)
result:[4,5,1]
第三种列表元素倒序:列表名.sort(reverse = True)
list01 = [3,1,2,5]
list01.sort(reverse = True)
print(list01)
result:[5,3,2,1]
列表到这里就结束了,接下来就是元组了
元组tuple
定义:由一系列变量组成的不可变序列容器。
详细说明:比较与列表的定义的不同之处,很容易发现,列表是可变而元组是不可变的。
特征:因为是不可变,所以一但创建,不可以再添加/删除/修改元素。
基本操作:
1.元组创建
第一种空元组创建:元组名 = ( )/ 元组名 = tuple()
第二种非空元组创建: 元组名 = (元素1,)/ 元组名 = 元素1,元素2/ 元组名 = tuple(可迭代对象)
2.获取元素
根据索引跟切片,具体跟列表很类似,具体我就不例子
3.遍历元组
依然还是一样的,用for循环来遍历,也跟列表类似
字典dict
定义:由一系列键值对组成的可变映射容器。
特征:
1.字典中的数据必须以键值对的形式出现,key(键):必须是可哈希的值,比如int、string、float、tuple,但是list,set,dict不行 。value(值):可以为任何值(任何对象的数据)
2.键不可重复,值可重复
3.字典中键(key)是不可变的,何为不可变对象,不能进行修改;而值(value)是可以修改的,可以是任何对象。在dict中是根据key来计算value的存储位置,如果每次计算相同的key得出的值(value)结果不同,那dict内部就完全混乱了。
基本操作:
1.字典的创建:
第一种:字典名 = {键1:值1,键2:值2}
第二种:字典名 = dict (可迭代对象)
2. 添加/修改元素:字典名[键] = 数据
详细说明: 键不存在,创建记录。 键存在,修改映射关系。通俗点讲就是需要判定键是否存在,如果存在就是修改元素,如果没有存在,那么就是在字典里添加新的元素
3. 获取元素: 变量 = 字典名[键]
4. 遍历字典:
一:for 键名 in 字典名:
字典名[键名]
二:for 键名,值名 in 字典名.items():
语句
5.删除元素: del 字典名[键]
6.清空字典:字典名.clear()
集合set
定义:由一系列不重复的不可变类型变量组成的可变映射容器。
特征:
1.集合更接近数学上集合的概念。集合中每个元素都是无序的、不重复的任意对象。
2.可以通过集合去判断数据的从属关系,也可以通过集合把数据结构中重复的元素减掉。集合可做集合运算,可添加和删除元素。
3.集合内数据无序,即无法使用索引和分片
4.集合内部数据元素具有唯一性,可以用来排除重复数据
5.集合内的数据:str,int,float,tuple,冰冻集合等,即内部只能放置可哈希数据
基本操作:
1.创建空集合:
集合名 =set()
集合名 =set(可迭代对象)
2.添加元素:集合名.add(元素)
3.删除元素:集合名.discard(元素)/集合名.remove(元素)
集合除了基本操作,最多是关心它的数学运算,下面我们就来说说运算吧
1.交集&:返回共同元素。
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 & s2
result:{2, 3}
2. 并集:返回不重复元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 | s2
result: {1, 2, 3, 4}
3. 补集-:返回只属于其中之一的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 - s2
# {1} 属于s1但不属于s2
补集^:返回不同的的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 ^ s2
# {1, 4} 等同于(s1-s2 | s2-s1)
4. 子集<:判断一个集合的所有元素是否完全在另一个集合中
5. 超集>:判断一个集合是否具有另一个集合的所有元素
s1 = {1, 2, 3}
s2 = {2, 3}
s2 < s1 # True
s1 > s2 # True
以上就是我总结的一些python内部数据结构的基本知识内容,有些地方写得不好,多多包涵,如有错误,欢迎指出,大家共同学习进步!!!