当前位置: 首页 > news >正文

简述Python中常见的数据结构

导读:Python中常见的数据结构有列表(list)、元组(tuple)、集合(set)、字典(dict)等,这些数据结构表示了自身在Python中的存在形式,在Python中可以输入type(对象)查看数据类型。

1

列表

(1)创建列表

列表是Python内置的一种数据类型,它是一种有序的数据集合,是用于存储一连串元素的容器。列表用[]来表示,列表中的每个元素可以相同也可以不相同。

In [1]: list1 = ['wellcom','to','the','sjwjyaisf1688']


In [2]: list1
Out[2]: ['wellcom', 'to', 'the', 'sjwjyaisf1688']


In [3]: list2 = ['wellcom','to','the','sjwjyaisf1688',6,6,6]


In [4]: list2
Out[4]: ['wellcom', 'to', 'the', 'sjwjyaisf1688', 6, 6, 6]

除了可以使用“[]”创建列表外,还可以使用list()函数创建列表:

In [5]: list(['xiao','xiao','wa','jue','ji',666]
Out[5]: ['xiao', 'xiao', 'wa', 'jue', 'ji', 666]


In [6]: list('666')
Out[6]: ['6', '6', '6']

列表支持加法操作,即将两个或多个列表合并为一个列表,具体操作如下:

In [7]: ['wellcom','to','te']+['xiao','xiao','ji','666']
Out[7]: ['wellcom', 'to', 'te', 'xiao', 'xiao', 'ji', '666']

(2)列表的方法

Python中的列表对象本身内置了一些方法,这里主要介绍常用的append方法和extend方法。

append方法表示在现有列表的最后添加一个元素,一般在Python的循环控制语句中使用较多,具体示例如下:

In [8]: list2 = ['a','b','c']


In [9]: list2.append('d')


In [10]: list2
Out[10]: ['a', 'b', 'c', 'd']


In [11]: list3 = ['e','f']


In [12]: list2+list3
Out[12]: ['a', 'b', 'c', 'd', 'e', 'f']

append方法每次只能在当前列表的最后添加一个元素,而extend方法可以同时在当前列表的最后添加多个元素,类似于列表的加法(“+”)操作,表示将两个列表合并为一个列表。

In [11]: list2 = [0,1,2]


In [12]: list2.extend([3,4,5])


In [13]: list2
Out[13]: [0, 1, 2, 3, 4, 5]

2

元组

元组与列表类似,区别在于列表中的元素可以修改,而元组中的元素只能读取,不可更改。

(1)创建元组

创建元组的代码示例如下:

In [14]: tuple1=1,2,3


In [15]: tuple2="sjwjyaisf1688","xiaoxiaowajueji666"


In [16]: tuple3=(1,2,3,4)


In [17]: tuple4=()


In [18]: tuple5=(1,)


In [19]: print(tuple1,tuple2,tuple3,tuple4,tuple5)
(1, 2, 3) ('sjwjyaisf1688', 'xiaoxiaowajueji666') (1, 2, 3, 4) () (1,)

从上面的结果我们可以简单地总结出创建元组的几个要点:

  • 逗号分隔元组中的值,元组自动创建完成;

  • 元组大多数时候是被括号包围起来的;

  • 可以创建一个空元组,空元组外层只有一对括号;

  • 只含一个值的元组,必须在元组中加个逗号(,)。

与列表类似,元组也支持加法操作,即将两个或多个元组合并为一个元组。

In [20]: (1,2,3)+(4,5,6)
Out[20]: (1, 2, 3, 4, 5, 6)

(2)元组赋值

需要注意的是,列表可以进行赋值操作,而元组则不可进行赋值操作。具体示例如下:

In [21]: list2[1]='a'




In [22]: list2
Out[22]: [0, 'a', 2, 3, 4, 5]




In [23]: tuple1[1] = 'a'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-23-8b1c599ad6fe> in <module>()
----> 1 tuple1[1] = 'a'




TypeError: 'tuple' object does not support item assignment

可以看到,对列表进行赋值操作可以顺利完成,但试图对元组进行赋值操作则会报错,这也体现了元组中的元素不可更改的特点。

3

集合

在Python中,集合是一种特殊的数据结构,集合中的元素不能重复。可以通过列表、字典或字符串等数据结构来创建集合,也可以通过“{}”符号进行创建。在实际应用中,集合主要有两个功能,一是进行集合操作,二是消除重复元素。

In [24]: drink = {'water','milk','lemonade','beer','sprite'}


In [25]: drink
Out[25]: {'beer', 'lemonade', 'milk', 'sprite', 'water'}


In[26]:drink = set(['water','milk','lemonade','beer','sprite','milk'])


In [27]: drink
Out[27]: {'beer', 'lemonade', 'milk', 'sprite', 'water'}
另外,Python支持数学上的集合运算,包括差集、交集、并集等,假设有两个集合A、B:
In [28]: A = {1,2,3,4,5,6}


In [29]: B = {3,4,5}

下面分别举例说明。

1)求集合A与集合B的差集,即集合A的元素去除集合A、B共有部分的元素:

In [30]: A-B
Out[30]: {1, 2, 6}

2)求集合A与集合B的并集,即集合A与集合B的全部唯一元素(这里其实就是集合A中的所有元素):

In [31]: A | B
Out[31]: {1, 2, 3, 4, 5, 6}

3)求集合A与集合B的交集,即集合A与集合B的共有元素:

In [32]: A & B
Out[32]: {3, 4, 5}

4

字典

字典与前面介绍的几种数据结构都不太相同,它是使用键–值(key-value)对的方式来进行存储的,具有方便快速查找的优点。与集合类似,字典也是使用符号“{}”括起来的,但其中的每个键–值对之间用冒号“:”进行对应。

In[33]:dict1 = {'xiaoming':24,'xiaofang':28,'zhangsan':21,'wangwu':27}


In [34]: dict1
Out[34]: {'wangwu': 27, 'xiaofang': 28, 'xiaoming': 24, 'zhangsan': 21}
字典本身是无序的,但可以分别通过keys和values方法获取字典中的键和值。
In [35]: dict1.keys()
Out[35]: dict_keys(['xiaoming', 'xiaofang', 'zhangsan', 'wangwu'])


In [36]: dict1.values()
Out[36]: dict_values([24, 28, 21, 27])

另外,字典还支持通过键来访问其对应的值:

In [37]: dict1['xiaoming']
Out[37]: 24

需要注意的是,在定义字典时,键不能重复,否则重复的键值会默认替换原来的键值。

In[38]:dict2={'xiaoming':24,'xiaofang':28,'zhangsan':21,'wangwu':27,'xiaoming':25}


In [39]: dict2
Out[39]: {'wangwu': 27, 'xiaofang': 28, 'xiaoming': 25, 'zhangsan': 21}

本文摘编于《Python广告数据挖掘与分析实战》。


扫码关注【华章计算机】视频号

每天来听华章哥讲书

更多精彩回顾

书讯 | 6月书讯 | 初夏,正好读新书

书单 | 360漏洞响应平台(SRC)为白帽子挑选的10本互联网安全好书

干货 | 我的15年操作系统开源路——RT-Thread 创始人熊谱翔

收藏 | 学会这7个绘图工具包,Matplotlib可视化也没那么难

上新 | 一本书掌握Kubernetes核心技术

赠书 | 【第57期】中台与数字化转型

点击阅读全文购买

相关文章:

  • 终于有人把大数据架构讲明白了
  • 鸿蒙OS2面世,一本书了解“现代操作系统”!
  • 【书单】C/C++必读经典
  • 【第58期】人人可懂的技术科普书
  • 国内首篇云厂商 Serverless 论文入选全球顶会:突发流量下,如何加速容器启动?...
  • 【书单】Java必读经典
  • 工业软件定义制造,打赢关键核心技术攻坚战 | 《铸魂》读者见面会在北京王府井书店成功举办...
  • 【书单】Python必读经典
  • 【书单】程序设计好书推荐
  • 盘点数据科学最流行的29个Python库
  • 除了新发布鸿蒙系统,华为还在HMS生态上下功夫
  • 你跟大神程序员的差距,就在这8本内功心法
  • 《数据安全法》表决通过!最新解读来了
  • 【第59期】架构师成长必读书
  • 数据库、数据湖、数据仓库、湖仓一体、智能湖仓,分别都是什么鬼?
  • [译]如何构建服务器端web组件,为何要构建?
  • eclipse(luna)创建web工程
  • JS实现简单的MVC模式开发小游戏
  • js中的正则表达式入门
  • Linux快速复制或删除大量小文件
  • Promise初体验
  • Spark学习笔记之相关记录
  • Terraform入门 - 1. 安装Terraform
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • Windows Containers 大冒险: 容器网络
  • 动态魔术使用DBMS_SQL
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 自制字幕遮挡器
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​flutter 代码混淆
  • # 安徽锐锋科技IDMS系统简介
  • # 达梦数据库知识点
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)PySpark3:SparkSQL编程
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (十)c52学习之旅-定时器实验
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)德国人的记事本
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net 托管代码与非托管代码
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET序列化 serializable,反序列化
  • @DataRedisTest测试redis从未如此丝滑
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [Android 数据通信] android cmwap接入点
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [ESP32] 编码旋钮驱动
  • [js]- 两个对象的合并(Object.assign)
  • [MT8766][Android12] 增加应用安装白名单或者黑名单
  • [nowCoder] 两个不等长数组求第K大数
  • [PAT] 1041 Be Unique (20 分)Java
  • [PHP]关联和操作MySQL数据库然后将数据库部署到ECS