数据结构:通俗点说,就是储存大量数据的容器。这里主要介绍Python的4种基本数据结构:列表、字典、元组、集合。

格式如下:

列表:list = [val1,val2,val3,val4],用中括号;
字典:dict = {key1:val1,key2:val2},大括号,且每个元素是带有冒号的key与val的对应关系组;
元组:tuple = (val1,val2,val3,val4),小括号;
集合:set = {val1,val2,val3,val4},大括号。

1. 列表:

list = [val1,val2,val3,val4]

列表最显著的特征是:

列表中每个元素都是可变的;
列表中的元素都是有序的,即每个元素都有一个位置;
列表可以容纳Python中的任何对象。
接下来看下列表的增删改查。

增:

1
2
3
1 list = [1,'dwd',3.6]
2 list.insert(0,'Python')
3 print(list)

用insert方法可以实现在列表中增加元素。insert方法需要写明增加在哪个位置和增加的内容,新增元素的实际位置是在指定位置元素之前的位置;如果指定的位置不存在,默认会增加在列表末尾。

1
2
3
4
5
6
1 list = [1,'dwd',3.6]
2 list[0:0] = [9]
3 # 【0:0】是指在list中的第1个位置插入新元素
4 list[3:3] = ['a']
5 # 【3:3】是指在list中的第4个位置插入新元素
6 print(list)

上面说到的这两种方法都是添加单个元素,除了添加单个元素外,还可以添加多个元素,用extend方法来实现。

1
2
3
4
5
1 list_a = [1,'dwd',3.6]
2 list_b = ['Python',56,'game']
3 list_a.extend(list_b)
4 # extend方法用于在列表末尾一次性追加另一个列表中的多个值
5 print(list_a)

删:

1
2
3
1 list = [1,'dwd',3.6]
2 list.remove('dwd')
3 print(list)

删除列表中的元素除了用上面的remove方法来实现外,也可以用del关键字来声明:

1
2
3
4
1 list = [1,'dwd',3.6]
2 del list[0:2]
3 # 【0:2】是删除第1和第2个位置的元素
4 print(list)

改:

1
2
3
4
1 list = [1,'dwd',3.6]
2 list[2] = 7
3 list[0] = 'start'
4 print(list)

如果想要替换掉列表中的某个元素,可以直接给列表某位置的元素重新赋值,list[2]指list列表中的第3个元素。

查:

列表的索引与之前文章《Python入门_浅谈字符串的分片与索引、字符串的方法》中提到的字符串的索引类似,同样是分正反两种索引方式,可以从前往后,也可以从后往前索引。比如:

1
2
3
4
5
6
7
8
9
list = [1,'dwd',3.6]
print(list[1])
# 打印第2个位置的元素
print(list[-1])
# 打印倒数第一个位置的元素
print(list[:2])
# 打印第1和第2个元素
print(list[1:])
# 打印第2到最后一个的元素

但如果想查看某个元素的位置,就不适合用这种方式,程序会报错。因为列表只接受用位置进行索引,不可以通过元素来查找位置。

2. 字典:

dict = {key1:val1,key2:val2}

编程世界中的很多概念都源自于生活,字典也是。这种数据结构如我们使用的字典一样,通过“名称—内容”来构建,在Python中每个元素是带有冒号的key与val的对应关系组,习惯称之为键值对。

字典的特征如下:

字典中的元素必须是键值对的形式;

键(key)不可以重复,而值(val)可以重复;

键不可变,无法修改;值可修改,可以是任何对象。

即使字典中有重复的键,打印出来时也只会出现一次。比如:

1
2
1 dict = {'A':'art','B':'big','C':'cute','C':'cute'}
2 print(dict)

接下来看下字典的增删改查。

增:

字典中没有像列表那样有一个现成的insert方法可以使用,但可以通过下面这种方式插入元素,元素默认会插入在最后一个位置。

1
2
3
1 dict = {'A':'art','B':'big','C':'cute'}
2 dict['D'] = 'dictionary'
3 print(dict)

上面讲到在列表中增加多个元素时可以使用extend方法来实现,在字典中也有对应的update方法来实现添加多个元素。

1
2
3
1 dict = {'A':'art','B':'big','C':'cute'}
2 dict.update({'D':'dictionary','E':'exam'})
3 print(dict)

删:

在字典中删除某元素,也可以使用del关键字。

1
2
3
1 dict = {'A':'art','B':'big','C':'cute'}
2 del dict['B']
3 print(dict)

需要注意的是,虽然字典是用大括号的,但在删除时依然使用的是中括号。

改:

如果要修改字典里的元素,直接重新给键赋值即可。

1
2
3
1 dict = {'A':'art','B':'big','C':'cute'}
2 dict['B'] = 'beyond'
3 print(dict)

查:

在字典中进行索引时,和删除一样,用的是中括号,中括号中存放字典的键,也就是说对字典元素进行索引时是通过键来索引的。

1
2
3
1 dict = {'A':'art','B':'big','C':'cute'}
2 dict['B']
3 print(dict['B'])

之前在文章《Python入门_浅谈字符串的分片与索引、字符串的方法》中有提到过字符串的分片,在字典里,字符串是不可以进行分片的。

3. 元组

tuple = (val1,val2,val3,val4)

Python中的元组与列表类似,不同之处在于元组不可以修改,类似于稳固版的列表,因此在列表中可以使用的增删改的方法在元组中是不可以使用的,但是可以对元组中的元素进行索引,和列表类似。

1
2
3
4
5
1 tup = (1,2,'s',7)
2 print(tup[0])
3 print(tup[-1])
4 print(tup[1:])
5 print(tup[:-2])

4. 集合

set = {val1,val2,val3,val4}

集合的概念有点接近于数学上的集合。每个集合中的元素是无序的、不重复的任何对象,我们可以通过集合去判断数据的从属关系,有时还可以通过集合把数据结构中重复的元素减掉。

集合不可以被切片也不能被索引,除了做集合运算之外,集合元素可以被添加和删除。

1
2
3
4
5
6
7
set = {7,1,8,3,4,5,3}
set.add(0)
# 新增元素0
set.discard(7)
# 删除掉元素7
print(set)
# 打印出的集合会从小到达排列,并去重

等后面如果用到集合时,再详细展开集合的运算。

后续会介绍下数据结构的一些小技巧。

操作环境:Python版本,3.6;PyCharm版本,2016.2;电脑:Mac

Python常用的数据结构详解的更多相关文章

  1. Python 常用外部模块详解

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  2. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

  3. Python 列表(List)操作方法详解

    Python 列表(List)操作方法详解 这篇文章主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下   列表是Python中最基本 ...

  4. Python数据类型及其方法详解

    Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...

  5. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

  6. Maya 常用环境变量详解

    Maya 常用环境变量详解 前言: Maya 的环境变量让用户可以很方便的自定义 Maya 的功能. 在 Maya 的 Help 帮助文档中有专门的一个章节< Environment Varia ...

  7. Javascript常用的设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  8. 常用socket函数详解

    常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...

  9. Python的logging模块详解

          Python的logging模块详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志级别 日志级别指的是产生的日志的事件的严重程度. 设置一个级别后,严重程度 ...

随机推荐

  1. django-blog:多对多查询

    简单写一下多对多查询model 不是多对多的字段我就没写上来的 class Tag(models.Model): name = models.CharField(max_length=20,verbo ...

  2. rewrite例子集合

    在 httpd 中将一个域名转发到另一个域名 虚拟主机世界近期更换了域名,新域名为 www.wbhw.com, 更加简短好记.这时需要将原来的域名 webhosting-world.com, 以及论坛 ...

  3. 小白需要了解的Ajax和websocket的区别以及使用场景!

    在我们日常使用的互联网产品中,很多都是前后端数据的交互来完成的,说到数据交互就不得不提Ajax和websocket,它们可是数据交互的利器,那么它们分别是什么?websocket与Ajax轮询的区别又 ...

  4. 插曲 强大的神器 vmware

    电脑到了  这连天给电脑配环境变量  真的想死  发现用 虚拟机 直接跑别人配置好的镜像文件   多快好省超级开心 比较毒瘤的  clion  不仅要配置c++ 环境  还要走cmake  等一堆东西 ...

  5. AttributeError: module 'selenium.webdriver.common.service' has no attribute 'Service'

    今天爬虫时需要使用到selenium, 使用pip install selenium进行安装. 可是一开始写程序就遇到了AttributeError: module 'selenium.webdriv ...

  6. 一线大厂的分布式唯一ID生成方案是什么样的?

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  7. NodeJS框架一览

    NodeJS 框架一览 Express 当你使用Node.js构建web应用程序时, Express通常被视为事实上的Web服务器.它的哲学(一个可以使用中间件包扩展的简约核心)是大多数Node.js ...

  8. GTX 1080显卡出错

    NVRM: RmInitAdapter failed! (0x26:0xffff:1097) NVRM: rm_init_adapter failed for device bearing minor ...

  9. spring学习之依赖注入DI与控制反转IOC

    一 Ioc基础 1.什么是Ioc? Ioc(Inversion of Control)既控制反转,Ioc不是一种技术,而是一种思想,在Java开发中意味着将设计好的对象交给容器来进行控制,并不是像传统 ...

  10. windows 安装Bitcoin Core使用

    1.官网下载https://bitcoin.org/en/download 选择Windows  其他系统就选择对应的就好 2.双击安装完过后,进入bin目录,打开bitcoin-qt.exe运行,提 ...