python数据的存储结构_Python数据结构

Python秉承方便程序员的理念,提供了几个功能强大而高效的数据结构:元组、列表、字典和集合。程序员可以根据需要组合使用它们,以创建更复杂的数据结构。在Python中,两个主力数据结构是列表和字典。列表按顺序存储数据,而字典就像小型数据库,使用键高效地存储和检索数据。本节主要介绍序列、元组、列表、字典和集合这几种数据结构。

一、序列在Python中,序列是一组按顺序排列的值。

Python有3种内置序列类型:字符串、元组和列表。字符串和列表是最常见的序列,元组较少使用。

序列的优点之一是像之前介绍的字符串一样支持索引和分片。所有序列的特征: 第一个正索引为零,指向左端; 第一个负索引为-1,指向右端; 可使用分片表示法来复制子序列; 可使用+和*进行拼接(即合并)。进行拼接的序列类型必须相同; 可使用函数len计算其长度; 表达式x in s检查序列s是否包含元素x,如果x位于s中,则返回True,否则返回False。

二、元组元组是一种不可变序列,即创建之后不能再做任何修改。

元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串、数字甚至元组。

元组通常代表一行数据,而元组中的元素代表不同的数据项。

1、元组的创建

格式:

tuple=(元素1,元素2,…元素n) #定义n个元素组成的元组

tuple=() #定义空元组

tuple=(元素1,) #定义单元素元组

例:创建元组

执行结果:

2、元组的访问

元组中元素的值通过索引访问,索引是一对方括号中的数字,索引也称为“下标”。

格式:

tuple[n] #访问第n个元素

tuple[m:n] #访问第1个索引到第2个索引之间的索引元素,但不包括第2个索引指向的元素其中,n、m可以为0、正、负整数。

例:访问元组的元素

执行结果:

例:操作元组

执行结果:

3、常用元组函数

函数名返回值x in tupple若x是元组tupple中的一个元素,则返回True,否则返回Falselen(tupple)元组tupple包含的元素数tupple.count(x)元素x在元组tupple中出现的次数tupple.index(x)元组tupple中第一个元素x的索引,若x未包含在元组tupple中,将引发ValueError异常

例:元组函数应用

执行结果:

三、列表列表是Python中非常重要的数据类型,通常作为函数的返回类型。

列表和元组相似,也是由一组元素组成。列表可包含任何类型的值:数字、字符串甚至序列。

列表与元组的重要差别是列表是可变的,即可以在不复制的情况下添加、删除或修改列表元素。

1、列表的创建

格式: list=[元素1,元素2,…元素n] #定义n个元素组成的列表

list=[] #定义空列表

list=[x] #定义只包含一个元素的列表,与元组不同,最后的逗号不是必须的说明:列表用方括号括起,其中元素用逗号分隔。

例:创建列表

执行结果:

2、列表的使用

列表的使用与元组十分相似,同样支持负数索引、分片以及多元列表等特性,但列表的元素可修改。 与字符串和元组一样,可使用len获取列表长度,还可使用+和*拼接列表。

例:列表的使用

执行结果:

3、常用列表函数

函数返回值s.append(x)在列表s末尾处添加元素xs.count(x)返回元素x在列表中出现的次数s.extend(lst)将lst的所有元素都添加到列表s末尾s.index(x)返回第一个x元素的索引s.insert(i,x)将元素x插入到索引i指定的元素前面,结果是s[i]=xs.pop(x)删除并返回s中索引为i的元素s.remove(x)删除s中的第一个x元素s.reverse(x)反转s中元素的排列顺序s.sort()将s的元素按升序排列

例:在列表末尾添加元素或列表

执行结果:

例:列表的查找、排序和反转

执行结果:

4、列表解析

列表的用途如此之多,以至于Python提供了一种用于创建列表的特殊方法—列表解析。 以下通过示例了解如何实现列表解析。

例:用普通方法和列表解析方法分别创建一个由1~10的平方组成的列表

执行结果:

例:将列表中的每个数字翻倍并加上7

执行结果:

5、函数作为列表的元素

用函数作为参数与列表一起使用非常有用,也称为高阶编程。

例:假定L是一个列表,f是一个函数,用函数替换每个元素改变列表,即用f(e)改变L中的元素e。

执行结果:

四、字典字典是Python重要的数据类型,字典是由“键—值”对组成的集合,字典中的“值”通过“键”来引用。

字典也称为关联数组、映射或散列表。

Python字典利用了“散列”方法,使用专门的散列函数完成,即字典中的每个键都被转换为一个数字—散列值。字典中值存储在一个底层列表中,并用散列值作为索引。访问值时,将提供的键转为散列值,再跳到列表的相应位置。

使用“键”来访问字典值效率极高。另外与列表一样,字典也是可以改变的:可以添加、删除或修改“键—值”对。

1、创建字典

格式:

dictionary={key1:value1, key2:value2, …, keyn:valuen)}#创建n个“键—值”对组成的字典

dictionar={} #创建空字典注意,对于字典的键有两个限制:

字典中的键必须独一无二,即在同一个字典中,任何两个键—值对都不能相同;

键必须是不可变的。因此,字典键不能是列表、字典

对值没有这两个限制。

2、字典的访问

字典的访问与元组、列表有所不同,元组和列表是通过数字索引获取对应的值,而字典是通过key值获取相应的value值。

格式: value=dict[key]

说明:

字典的添加、删除和修改只需执行一条赋值语句即可,例如:dict[’x’]=’value’

字典没有remove操作。删除字典元素可调用内置函数del()完成。

例:字典的创建、添加、删除和修改

执行结果:

3、字典函数

函数名返回的值d.item()返回一个由字典d的键—值对(key,value)组成的视图(view)d.keys()返回一个由字典d的键组成的视图d.value()返回一个有字典d的值组成的视图d.get(key)返回与key相关联的值d.pop(key)删除键key并返回与之相关联的值d.popitem()删除字典d中某个键—值对并返回相应的键—值对d.clear()删除字典d的所有元素d.copy()复制字典dd.fromkeys(s,t)创建一个新字典,其中的键来自s,值来自td.setdefault(key,v)如果键key包含在字典d中,则返回其值;否则返回v并将(key,v)添加到字典d中d.update(e)将e中的键—值对添加到字典d中;e可能是字典,也可能是键—值对序列说明: popitem()返回并删除字典的某个键—值对,具体是哪个预先并不知道,因此仅当不在乎字典元素的顺序是,此函数才适用。 item()、keys()和values()都返回一个特殊对象—视图。视图被链接到原始字典,因此若字典发生变化,视图也将相应地变化。

例:字典函数应用一

执行结果:

例:字典函数应用二

执行结果:

4、字典的排序和复制

字典的排序可以使用内置函数sorted()实现。sorted(iterable, key=None, reverse=False) --> new sorted list

例:字典排序

执行结果:

关于复制:1. 复制分为深拷贝和浅拷贝,不只限于字典,适用于Python的任何对象。可使用copy模块来实现对象的深拷贝和浅拷贝,deepcopy()用于深拷贝,copy()用于浅拷贝。2. 深拷贝能够拷贝对象内部所有数据和引用,引用相当于C语言中指针的概念,Python并不存在指针,但是变量的内存结构中通过引用来维护变量。3. 浅拷贝只是复制数据,并没有复制数据的引用,新的数据和旧的数据使用同一块内存空间。

例如:字典B浅拷贝字典A的数据,如果字典B的数据发生添加、删除或修改操作,字典A的数据也将发生变化;相反,如果字典B深拷贝字典A的数据,字典B的数据即使发生变化,也不会影响的字典A。

例:字典的拷贝

执行结果:

五、集合在Python中,集合是一系列不重复的元素。集合类似于字典,但只包含键,而没有相关联的值。

在Python中,集合是相对较新的功能,在其还不支持集合时,一般使用字典模拟集合。

集合分两类:可变集合(set)和不可变集合(frozenset)。对于可变集合,可添加和删除元素,而不可变集合一旦创建就不能更改。

与字典一样,集合的元素排列顺序也是不确定的。 集合没有列表和字典用得多,本章简要介绍,详细内容可参阅:https://docs.python.org/3/library/stdtypes.html#set集合基本功能:包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集,即异或)等数学运算。

大括号或 set()函数可以用来创建集合。 注意:想要创建空集合,必须使用 set() 而不是{}。

例:创建集合

执行结果:

例:集合操作

执行结果:

六、在循环中应用序列在循环中引用相关函数,可以高效地得出相应结果。例如:enumerate()函数

zip()函数

reversed()函数

sorted()函数

items()方法(序列的) 函数具体格式及功能见帮助信息(如:help(enumerate)。

例:同时获取序列索引及值

例:同时循环两个或多个序列

例:同时获取键和对应值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值