跟我一起认识Python数据结构

首先大家看到数据结构,想到了什么呢,对,我们第一要先思考数据机构是什么?用来干什么?有什么样的作用,那我将逐个来搜索答案,进一步清晰了解它


数据结构是什么:

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

用我自个的白话组织:数据结构是让我们可以对数据存储和管理的一种手段,具体让我们可以对数据可存可取可删可查可添等操作,就是一个小型的数据库。


大家现在应该跟我一样简单认识到数据机构,那接下来我们是可以回复数据结构是用来做什么的了,简单来说:


数据结构就是一种工具,一种手段,在计算机里,用其工具或者说是手段以达到对数据进行我们想要的管理以及操作,就如同我们吃饭喝水需要借助筷子和杯子等工具。


其有什么样的作用,相信大家跟我一样都有自己的认识了,既然很形象的比拟成了工具跟手段,那么就其作用就是让我们更好的对简单数据进行管理和操作,就如同没有筷子跟杯子,你就只能手抓/嘴舔,这里就不皮了,主要是让我们更好的理解它。


那么我们现在就要了解和学习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内部数据结构的基本知识内容,有些地方写得不好,多多包涵,如有错误,欢迎指出,大家共同学习进步!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280