简述python中基本数据结构_Python入门——基本数据结构

news/2025/2/26 19:56:36

Python里面的数据结构,基本的有下面几种,列表,集合,元组,对于不同的数据结构当然有不同的表现形式,操作方法了,先来看看各种数据结构的表示方式

#列表

[1,2,3,4,5,6]

#元组

(1,2,3,4,5,6)

#集合

{1,2,3,4,5,6}

#字典

{'name': 'tom', 'age': 11}

列表

列表的特点是,它是一个可变的集合,不仅仅是结构可变,里面还可以放类型不一样的对象,比如

num = [1,2,3,4,"23",True]

for x in num:

print(type(x))

#输出结果为

可以看到同一个集合中可以加入各种类型的数据,不会有类型检测。所以我们在使用的时候在代码的编写上也要注意了。

对列表的常规操作有

获取元素

如果只是单纯地访问元素,我们可以使用切片或者下标num[0...n],不过列表有一个

num = [1,2,3,4,"23",True]

print(num[3])

#输出结果为3

print(num[3:5])

#输出结果为[4, '23']

添加元素

num = [1,2,3,4,"23",True]

#方法1,append方法插入,常用,只能添加一个元素

num.append(3)

#方法2,获取切换的最后一个位置,在这里就是num[6:6]的意思

num[len(num):] = [3]

print(num)

#输出结果为[1, 2, 3, 4, '23', True, 3]

添加一个集合

#添加一个集合,extend扩展的意思

num = [1,2,3,4,"23",True]

1、方法1,extend方法插入,添加一个集合

num.extend([8,5])

2、方法2,切片方法,同上

num[len(num):] = [8,5]

print(num)

#输出结果为[1, 2, 3, 4, '23', True, 3,8,5]

插入元素到指定位置

num = [1,2,3,4,"23",True]

#方法1,insert插入让3成为集合里面下标为1的元素,其他元素往后挪

num.insert(1,3)

#方法2,使用切片

num[1:1] = [3]

print(num)

#输出结果为[1, 3, 2, 3, 4, '23', True]

移除元素

删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。

num = [1,2,3,3,4,"23",True]

num.remove(3)

print(num)

#输出结果为[1, 3, 2, 3, 4, '23', True],只会移除最先匹配到的元素

#如果移除的元素不存在,会抛出下列错误ValueError: list.remove(x): x not in list

还有一些其它的函数

#列表采用的链式结构,pop默认把序列尾部的元素remove并返回,pop(x)代表的是pop指定下标的元素

pop()

pop(x)

#对列表中的元素就地进行排序

sort()

#对列表的元素进行倒排

reverse()

#返回一个列表的副本,可以通过切片[:]来实现

copy()

#计算列表中某个元素x的个数

count(x)

#获取列表中第一个匹配到的元素x的下标,如果没有匹配到的话返回一个错误ValueError: x is not in list

index(x)

#清空列表的元素,和del num[:]的效果是一样的

clear()

字符串也是列表,所以我们适用于字符串的操作,基本上都适合列表,比如下面的用法

num = [1,2,3]

print(num * 3)

#输出结果为[1, 2, 3, 1, 2, 3, 1, 2, 3]

所以列表的操作也变得和字符串一样简单了,但是我们最好还是规范一下代码,这样利用代码的阅读。

元组

元组(tuple)也是一个非常常用的数据结构,区别于列表,元组的一个最大的特性就是不可变。一个元组由数个逗号分隔的值组成,比如:

t = 1,2,3,4,5,'sad',True

print(t)

#输出结果为(1, 2, 3, 4, 5, 'sad', True)

虽然我们定义元组的时候可以不加括号,但是加上括号可以更加适合代码的阅读。

元组可以进行嵌套,类似于广义表一样

a = (1,2,3)

b = (4,5,6)

print((a,b))#必须添加一个括号,否则,print函数会把`,`号转换成空格

不可变

元组是不可变的,这种不可变体现在元素的引用上,比如

num = [1,2,3]

a = (1,2,3,num)

# 对元组元素进行修改会抛出异常TypeError: 'tuple' object does not support item assignment

a[0] = 3

print(a)

num = [1,2,3]

a = (1,2,3,num)

print(a)

#输出结果为(1, 2, 3, [1, 2, 3])

num[0] = 3

print(a)

#输出结果为(1, 2, 3, [3, 2, 3])

可以看到元组虽然是可不变的,但是对于元组里面的list列表是可变的,我们对list进行操作并不会报错。这是因为我们虽然修改了列表,但是元组里面的列表对象指向的内存地址依然是不变的。

当我们想要构建空的元组或者构建只有一个元素的元组

#定义空元组

a= ()

#定义只有一个元素的元组,一定要加上,号,否则无法区分是元组还是单个的对象

b = (1,)

print(a)

print(b)

#输出结果为

()

(1,)

python的语法非常的神秘莫测,不同于其他编程语言,能够直接取出线性序列中的元素

a= (1,2,3)

t1,t2,t3 = a

print(a)

print(t1,t2,t3)

#输出结果为

(1, 2, 3)

1 2 3

集合

另一种比较常见的数据结构是集合(set),和java一样,集合是一个无序不重复元素的集,基本功能包括关系测试和去重(是否包含子集,交集,并集等)

通常我们用大括号或者set()函数来创建集合,使用set()来创建空集合

num = {1,2,3,4,5,6,6}

print(num)

#输出结果为{1, 2, 3, 4, 5, 6}

#检测是否包含元素

print(1 in num)

#输出结果为True

num = {1,2,3,4,5,6,6}

num2 = {0,1,2,3,7,8,9}

#差集,集合A中有,集合B中没有的元素

num3 = num - num2

print(num3)

#输出结果为{4, 5, 6}

#交集,两个集合都包含的元素

num3 = num & num2

print(num3)

#输出结果为{1, 2, 3}

#并集,融合两个集合,去除重复的部分

num3 = num | num2

print(num3)

#输出结果为{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

#异或,存在于集合A或者集合B,但不同时存在于两个集合中

num3 = num - num2

print(num3)

#输出结果为{0, 4, 5, 6, 7, 8, 9}

有一种集合推导式语法:

num= [x for x in list(range(20)) if x % 2 != 0]

print(num)

#输出结果为{1, 3, 5, 7, 9, 11, 13, 15, 17, 19}

num= {x for x in "ababababababbae" if x not in "abc"}

print(num)

#输出结果为{'e'}

字典

字典相当于java中的map,字典以key作为索引,关键字key可以是任意不可变类型,如果会比的话,就无法求得相同的索引了,通常用字符串或数值。如果元组中只是包含字符串或者数字的话,元组也是可以作为关键字使用的,但是如果元组中包含像列表这样的可变对象,那么就不能够作为关键字了。

字典是一个无序的键值对组合,使用{}来创建空的字典。基本上在java中对map的操作都适用于python里面的字典,比如对key相同的键值对进行写入的话,会覆盖原来的value,不过要是访问不存在的key,在java里面会返回null,而且python中会返回None,但是python中还可以设置默认的值

person= {'name': 'tom', 'age': 11}

grade = person.get('grade')

print(grade)

#输出结果为None

person= {'name': 'tom', 'age': 11}

grade = person.get('grade','grade first')

print(grade)

#输出结果为grade first

对一个字典执行 list(d.keys())将返回一个字典中所有关键字组成的无序列表(如果你想要排序,只需使用 sorted(d.keys())使用 in 关键字可以检查字典中是否存在某个关键字(指字典),使用del可以删除key关键字,或者删除整个字典,删除之后如果再访问字典,就会抛出NameError: name 'person' is not defined对象未定义的异常

构造字典可以使用{},也可以使用dict()构造函数

person = dict([('name','tom'), ('age',11)])

print(person)

#输出结果为{'name': 'tom', 'age': 11}

person = dict(name='tom',age=11)

print(person)

#输出结果为{'name': 'tom', 'age': 11}

也可以使用字典推导式创建字典

num = {x:x**2 for x in range(5)}

print(num)

#输出结果为{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}


http://www.niftyadmin.cn/n/3166393.html

相关文章

Mysql基础语句+数据类型实例

先建一张表用来练习create table class(id int primary key auto_increment,sname varchar(10) not null default ,gender char(1) not null default ,company varchar(20) not null default ,salary decimal(6,2) not null default 0.00,fanbu smallint not null default 0 )e…

java xml判断节点_java 判断xml中是否含有一个指定的节点

RT,使用jdom4进行解析。/**** 判断xml中是否含有一个指定的节点* param str xml主题内容* param nodeString 指定的节点* return*/SuppressWarnings("rawtypes")public static boolean isExistNote(String str,String nodeString ) {if (StringUtils.isBl…

async/await的简单使用

async/await的简单使用 使用场景: async/await是基于Promise对象的使用,使用在异步返回消息执行顺序的处理逻辑 问题描述: 先看一下这段代码,这段代码主要实现的功能是,获取定位地址并赋值在input框中,但…

kali命令连接wi-fi_如何从Windows 8中删除打开或不安全的Wi-Fi热点:带源的Wifi.exe命令行实用工具

kali命令连接wi-fiFor the most part Im happy with Windows 8 but one feature was removed that makes no sense to me - the wireless networks dialog. 在大多数情况下,我对Windows 8感到满意,但是删除了一项对我没有意义的功能-无线网络对话框。 Su…

java 分布式 定时任务_Java中实现分布式定时任务的方法

定时器Scheduler在平时使用比较频繁,在springboot中,配置好Scheduled和EnableScheduling之后,定时器就能正常执行,实现定时任务的功能。但是在这样的情况下:如果开发的服务需要水平部署实现负载均衡,那么定…

阿里云表格存储TableStore全新升级 打造统一在线数据存储平台 ...

3月6日,阿里云表格存储 TableStore 全新升级,突破原生 NoSQL 数据库边界。提供多元索引、二级索引能力,支持数据便捷查询,与计算生态无缝集成,打通数据实时消费通道,打造统一在线数据存储平台,深…

java jceks 密钥,JCEKS keyStore在JavaTM加密扩展中使用的加密?

In JCEKS key Store which algorithm used and what is the size of key .i find something that its use Triple DESbut what is the key size..?Thanks解决方案Currently, each PrivateKey and SecretKey entry in a JCEKS key store is encrypted with 3-key triple DES in…

Fastify 2.0.1 和 1.14.3 发布,极速 Node.js Web 框架

Fastify 2.0.1 和 1.14.3 发布了。Fastify 是一个高度专注于以最少开销和强大的插件架构为开发者提供最佳体验的 Web 框架,号称是目前最快的 Node.js 应用框架之一。 它受 Hapi 和 Express 的启发。 2.0.1 更新内容主要有: Fixes: 修复:seria…