Python中内置的数据结构都有什么?

2020-09-29 17:09发布

7条回答
summer
2楼 · 2020-09-29 18:10

1、列表

2、字典

3、集合

4、元组

天天
3楼 · 2020-09-29 19:08

Python中7种数据结构:列表,元组,字符串,bytes,bytearray,集合,字典。

魏魏姐
4楼 · 2020-09-30 09:25

内置类型是指任何语言在设计初期定义的类型,如C语言中的int、double、char等。它也是在一种语言中最基本的类型,与编译器编译出的代码具有重大关系。值得一提的是,不同语言也拥有不同的内置类型, 但是所有内置类型的定义都与计算机的运算方式相关。

Python主要内置类型包括数值、序列、映射、类、实例和异常等。

数值类型:全局中只有一个(Python在解释器启动的时候,Python会用None类型生成一个None的对象),包括int类型、float类型、complex类型、bool类型。

迭代类型:在Python中,迭代类型可以使用循环来进行遍历。

序列类型:list(是可变序列,通常用于存放同类项目的集合)、tuple(是不可变序列,通常用于储存异构数据的多项集)、str(在Python中处理文本数据是使用str对象,也称为字符串。字符串是由Unicode码位构成的不可变序列。)、array、range(表示不可变的数字序列,通常用于在for循环中循环指定的次数)、bytes(由单个字节构成的不可变序列)、bytearray(bytes对象的可变对应物)、memoryvie(二进制序列)

映射类型:映射对象将具有hash的值映射到任意对象。映射是可变的对象。目前只有一种标准映射,即dictionary。字典的键几乎是任意值,也就是说,包含列表、字典或其他可变类型的值。

集合类型:作为一种无序的多项集,集合并不记录元素位置或插入顺序。相应地,集合不支持索引、切片或其他序列类的操作。目前Python有两种内置集合类型:set和frozenset。

set类型是可变的,其内容可以使用add()和remove()这样的方法来改变。由于是可变类型,它没有哈希值,且不能被用作字典的键或其他集合的元素。

frozenset类型是不可变并且具有哈希值,其内容在被创建后不能再改变,因此它可以被用作字典的键或其他集合的元素。

上下文管理类型:with语句

其他类型:模块、class、实例、函数、方法、代码、object对象、type对象、ellipsis(省略号)、notimplemented


浅浅77
5楼 · 2020-09-30 10:17

一.列表(list)

  列表一种跟java和c中的数据很像的一种数据结构,他都是保存一系列相似,且有序元素的集合,不过不同的是列表中的元素可以不是同一种数据类型,且列表的长度是可变的

  可以动态的增加可减少这一点则有点像java中的stringBuilder对象,列表中有一点值得注意的是在对列表进行复制是,不能简单的使用赋值语句,这样会使得两个变量同时指向一个列表,当一个改变时另一个变量的值也会改变,正确的复制方法是用copy()方法来进行复制

  关于一个存储结构增删查看则其必备的功能:

    1.列表元素的增加

      append的方法是将所要加的元素直接加到先前列表的末尾的方法,在增加的同时还会使得列表得长度增加

      extend方法是将一个列表中得所有元素加拓展到另一个列表的末尾将两个列表合并为一个列表

      insert方法是将一个元素插入到指定的位置,但是值得注意的是insert方法不能插到列表的末尾

    2.列表元素的删除

      remove删除列表中指定的值,如果列表中没有remove参数中指定的值解释器将会报错

      pop删除指定索引位置对应的对象,如果pop方法中没有参数是则其默认的是删除列表的最后的一个对象,该方法的返回值就是对应删除的对象,若其指定的索不存在      时解释器同样会报错

    下面通过一个简单的例子来说明以上方法的使用:

    

复制代码

#在 Don't panic变为 on tapphrase="Don't panic"plist=list(phrase)  #将phrase表示的字符串转化为列表print(phrase)       #将该字符串输出print(plist)        #结果为['D', 'o', 'n', "'", 't', ' ', 'p', 'a', 'n', 'i', 'c']plist.remove("'")   #将‘在列表中删除for i in range(3):
   plist.pop()     #将列表末尾的3个字符给删除,'n','i','c'plist.pop(0)        #将plist中索引对应的对象删除,也就是D#此时list中的值为['o', 'n', 't', ' ', 'p', 'a']plist.extend([plist.pop(5),plist.pop(4)]) #将p和a的位置交换plist.insert(2,plist.pop(3)) #将空格插入到对应索引为2的对象前phrase =''.join(plist) #将列表转化为字符串print(phrase)

复制代码

   3.列表元素的查看:
      值得说明的是列表的查看和数组相似,都支持下标查看不过不同的是列表的查看功能比数组更多

      a.中括号加下标可以查看列表中的任意元素且元素的下标也都是从0开始的,这点与数组相同,但不同的是数组中的下标不能为负数,而列表可以  

      其表示的是从右到左,而正数则是从左到右

      b.列表中支持切片查看,也就是查看某一段元素其用法为:list[开始位置:结束位置:步长]其中所有元素都可以省,只需要在括号中有一个元素即可例如:

       list[: :2]表示开始为0,结束为列表尾,步长为2

   下面我们任然以一段简单的代码来展示其用法:

    

复制代码

#在 Don't panic变为 on tapphrase="Don't panic"plist=list(phrase)
new_phase=''.join(plist[1:3])#在列表中截取onprint(new_phase)
new_phase=new_phase+''.join([plist[5],plist[4],plist[7],plist[6]])#切片的实例,以及负数plist[-1] # ctemp =plist[5:1:-1] #[' ', 't', "'", 'n']当步长为负数时其结果时从右到左遍历temp2=plist[::2]#['D', 'n', 't', 'p', 'n', 'c'],从头遍历到尾步长为2

复制代码

事实上对于存储类似对象的时候我们一般是使用列表,而对于那种有结构的数据是列表就显得不那么实用了因为列表很难存储数据之间的结构

所以对于那种结构化的数据我们一般采用字典来存储

二.字典(dict)

  字典使用来保存一个键值对集合,其中每个唯一的键都有一个与之对应的值,通常我们把字典称为关联数组,如果你学过java的那么对字典就不会陌生了因为它其实就是java中的set集合,python的字典是无序的它不会保留你插入时的顺序,同时由于字典使用的是一种高度优化的散列算法所以即使是没有顺序字典一样能快速的访问与一个键相关的值

1字典的定义:

其结构为{键1:值1,键2:值2},可以看出字典的开始和结束都是用大括号键和值用冒号隔开,不同键值对之间用逗号分隔,其中值可以为列表,另一个字典

2字典的增加:

字典时一个动态的集合他可以在键对不存在时插入新的键值对,但是字典中键必须进行初始化后才可以引用例如:在一个商店中你不知到你的商店中的苹果又没  有时

你不可以直接的使用苹果这个值而当你像添加时也需要查明商店中是否有这样物品,对于字典则无需这样。因为字典已经分装好了一个setdefault()方法只需直接调用即可

下面用一段简单代码展示:

复制代码

#字典的添加键值对fruit={}#当直接使用不存在的键值对时fruit['apple']+=1 #没有对该键初始化而直接使用会出现keyError#当不使用setdefault方法时动态的增加键值对if 'apple' not in fruit:
   fruit['apple']=0 #初始化键值fruit['apple']+=1 #增加苹果的量print(fruit['apple'])#使用setdefault时,其实就是设置一个默认值,确保使用时这个使用的键存在即可fruit.setdefault('apple',0)#当键存在时这个语句没有任何作用,相当于上面选择的分装fruit['apple']+=1print(fruit['apple'])

复制代码

3字典的遍历:

对于一个集合来说我们一般都会采用集合来遍历其中的所有元素但是对于字典来说单单只用循环的话并不够方便因为仅仅只用循环的话解释器只会处理字典的键

对于其值任然需要用键来查值,对于这种问题python提供了一个items()的方法使得可以直接使用循环变量来访问字典的键和值

下面通过一段简单的代码说明:

复制代码

fruit={'apple':10,'pears':5,'bananas':20,'orange':4}#直接使用for循环遍历for i in fruit:    print("种类",i,"数量",fruit[i])#使用items方法遍历for i,v in fruit.items():    print("种类",i,"数量",v)

复制代码

4字典的元素删除:

python的字典删除有三种方法,一种是clear()是删除字典中的所有元素,二是pop()根据pop中的参数删除与其键相同的键值对,三是popitem()随机删除字典中的元素

 

对于有结构的数据我们使用字典时会显得非常方便,因为他不仅可以保存结构,还可以保证记录不重复,但是对于那些没有结构的数据我们又不希望他们重复时,字典和列表显然都不适合我们使用了,这时我们就会想到使用集合了

三.集合(set)

1集合的定义:

{元素1,元素2,元素3.....}和字典一样都是用大括号定义,不过不同的是其中没有冒号分割,还有一种定义方法是向set()函数中传递任意一个序列(如一个字符串set('fsdaf'))

2集合的运算:

python中的集合同于数学中的集合同样有交,并,差等运算其中并算提供方法union(),差集方法difference()不过这里不同的是只能显示使用该方法的集合中不同于另一个集合的所有元素,交集的方法intersection()显示相同的元素

下面用代码来实现上述方法:

复制代码

#集合的运算temp={'a','e','i','o','u'}
temp2=set("fda");#交运算result=temp.intersection(temp2)#{'a'}#并运算result=temp.union(temp2)#{'a', 'o', 'f', 'd', 'u', 'e', 'i'}#差运算result=temp.difference(temp2)#{'o', 'e', 'u', 'i'}

复制代码

我们知道变量有两种一种是变量一种是常量,变量的值可以重新赋予,而常量的值则不行,在python中我们同样有一个不变的结构叫做元组

四.元组(tuple)

1元组的定义:

元组与列表密切相关列表是用中括号定义而元组则是用小括号定义(元素1,元素2,元素3,.....),值得注意的是当只有一个对象是并不能仅仅(对象)这样定义并不是元组,正确的定义方法是(对象,)这样才是元组

在最后我有必要说明一下:在这四个内置结构为空时的解释器的表示方法:1.空列表[] 2.空字典{} 3.空集合set() 4.空元组()


(1)数字(Numbers):int(整型),long(长整型),complex(复数),float(浮点型),bool(布尔型);

(2)字符串(String):"Python",'Python';

(3)列表(List):[1,2,3,4],[5,6,7,[8,9],10];

(4)字典(Dictionary):{1:"study",2:"Python"};

(5)元组(Tuple):(1, "shuai",2);

(6)集合(Set):{'P', 'y', 't', 'h', 'o', 'n'}


乐xenia
7楼 · 2020-10-21 16:50

Python中的数据结构

这里总结一下Python中的内置数据结构(Built-in Data Structure):列表list、元组tuple、字典dict、集合set,涵盖的仅有部分重点,详细地去介绍每个知识点并未涉及。

列表list

list的显著特征

  • 列表中的每个元素都可变的

    意味着可以对每个元素进行修改和删除

  • 列表是有序的,每个元素的位置是确定的,可以用索引去访问每个元素

  • 列表中的元素可以是Python中的任何对象

    可以为任意对象就意味着元素可以是字符串、整数、元组、也可以是list等Python中的对象。

>>> x = [1,2,3]>>> y = {'name':'Sakura'}>>> z="Test">>> a=[x,y,z]>>> a
[[1, 2, 3], {'name': 'Sakura'}, 'Test']


觉得Python中的list和C语言中的数组蛮像的,只是list中的元素类型可以为Python中的任意对象,C中的数组只能是同种类型。当访问他们中的元素时,都可采用索引。这里需要注意的是,list不仅可以向数组那样正向索引也可以反向索引。

list中的正反索引


   

list中的增删查改

list中有很多的方法,这里仅介绍对list中元素进行增删查改的方法。

  1. 利用insert()和分片将元素添加到指定位置 , 利用remove()和关键字del对
    元素进行删除

    需要注意分片[a:b]中的位置不包含位置b,利用[a,a]可以将元素添加至a位置

   

   

  1. 利用正反索引对元素进行查找

  2. 对元素修改可以直接赋值替换

  3. 列表中还有其他方法如pop()删除末尾元素,pop(i)删除指定位置i的元素,append()向末尾添加元素

list函数

可以通过list将序列创建为列表

Python中包含6中內建的序列:列表,元组,字符串、Unicode字符串、buffer对象和xrange对象。

>>> list("Hello,world")
['H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd']

其实list为一种类型并非函数,但此处二者并无多大区别。下面的tuple、dict都如此。

元组tuple

  1. 元组可以理解为一个固定的列表一旦初始化其中的元素便不可修改(认真理解这句话),只能对元素进行查询


>>> test=(1,2,3)>>> test
(1, 2, 3)>>> test[1]=4Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'tuple' object does not support item assignment>>> test[1:1] = 4Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'tuple' object does not support item assignment>>> test[1]2

  从上可知,tuple不支持对元素的修改(包括删除),tuple一初始化便固定下来了。




  再来看一个例子。

>>> test=('a','b',['A','B'])>>> print(test)
('a', 'b', ['A', 'B'])>>> test[2][0]='x'>>> test[2][1]='y'>>> test
('a', 'b', ['x', 'y'])

  这里看似元素中的元素改变了,可是仔细分析下,元组中的第三个元素是一个列表。

  代码3.4行改变的是列表中的值,元组所指的这个元素列表并没有改变,需要注意这点!

  这就涉及到Python中的可变对象和不可变对象,像list这样的就是可变对象,tuple便是不可变对象。

  1. 元组是固定的列表,那么元组的意义何在呢?

    因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple
    并且需要注意元组中元素的可变性!!

  2. 空的tuple可以记为(),若只有一个元素的tuple记为(1,)

    因为记为(1)的话,这个实际代表的是数字1,此时()是数学公式中的小括号

  3. 因为元组是固定的列表,所以其内置的大多数的方法和列表是差不多的。

  4. 可以通过tuple将序列转换为元组,用法和list一样

>>> tuple('Hello,world!')
('H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd', '!')

字典dict

字典这个概念就是基于现实生活中的字典原型,生活中的使用名称-内容对数据进行构建,Python中使用键(key)-值(value)存储,也就是C++中的map。

dict的显著特征

  • 字典中的数据必须以键值对的形式出现

  • 键不可重复,值可重复

    键若重复字典中只会记该键对应的最后一个值

  • 字典中键(key)是不可变的,为不可变对象,不能进行修改;而值(value)是可以修改的,可以是任何对象
    在dict中是根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。

dict的增删查改

  1. 可以采用“键值对”的方法和update()方法向字典中添加元素

    删除可以使用关键字del以及pop()方法

   

  1. 查询采用如查询列表元素的索引方式,使用键作为索引查找值

    若元素不存在会报错,在进行查找前,可以通过以下两种方法判断key是否存在:

    ① 成员资格运算符--in运算符

    ② get()方法(值不存在时返回NULL,也可指定返回的值)

>>> test={'Mon':1}>>> 'Fri' in testFalse>>> test.get('Fri')>>> test.get('Fri',-1)-1
  1. 对值得修改可以采用直接覆盖原值的方法

  2. dict中的元素是无序的,不可以采用分片。

dict函数

可以使用dict,通过其他映射或者(键,值)对的序列建立字典。

>>> test=[('name','Sakura'),('age',20)]>>> d = dict(test)>>> d
{'name': 'Sakura', 'age': 20}

dict也可以使用关键字参数创建字典,也可用映射作为dict参数,dict若不带任何参数,将返回一个空字典

>>> d = dict(name='Sakura',age=20)>>> d
{'name': 'Sakura', 'age': 20}>>> a=dict()>>> a
{}

集合set

集合更接近数学上集合的概念。集合中每个元素都是无序的、不重复的任意对象。
可以通过集合去判断数据的从属关系,也可以通过集合把数据结构中重复的元素减掉。集合可做集合运算,可添加和删除元素。

集合的创建

创建集合时需要用list作为输入集合,可通过add()方法增加元素,remove()方法删除元素

>>> test=set([1,2,3])>>> test
{1, 2, 3}>>> test.add(3)>>> test
{1, 2, 3}>>> test.add(6)>>> test
{1, 2, 3, 6}>>> test.remove(3)>>> test
{1, 2, 6}

集合中重复的元素会被过滤掉

集合运算

Python中的集合也可以进行集合的之间的交、并等运算

>>> s1 = set([1,2])>>> s2=set([2,3])>>> s1 & s2  # s1与s2{2}>>> s1 | s2  # s1与s2进行或运算{1, 2, 3}


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问