上一篇我们完成了环境搭建,并且也熟悉了使用IDE来更加方便的写代码,这一篇,我们来熟悉一下python的数据结构
*目录
- 什么是数据结构
- 为什么要用数据结构
- python基本数据结构
1. 什么是数据结构
看一下百科上的定义:
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。
那么也就是说,数据结构有两部分组成,一个是数据,另外一个是结构,啊,我没有在拆词啊。结构的话,就是数据之间的关系,比如说房屋的结构,就是建材之间的关系(位置)。
似乎从计算机科学的角度来说,底层的数据结构都是什么二叉树,链表,队列,FIFO什么的,真真是数据在计算机中的存储方式了,这些底层设计,是有算法支持基于数学的有效率指标的。
不过,既然我们站在高级语言的肩膀上,我们就先忽略这些细节好了,管你在计算存储器是怎么存的,我不听我不听我不听。
那么接下来我们从通俗易懂的(神经病的)层面,概述一下,什么是数据结构。
我们把数据,类比成我们的日常生活的小用品,比如手机、耳机、充电线之类的,数据结构呢,就是一个包(没错,就是包治百病的包)。包里面有大大小小的袋子,可以装不同的东西,既方便放东西(存储数据),也方便取东西(获取数据)。
所以,数据结构的价值,就是为了方便你们这些愚蠢的人类。(其实退一万步,程序本来就是为了方便人类而出现的)
2. 为什么要用数据结构
貌似上面把为什么要用数据结构也说了,为什么要用,当然为了方便,你说你就不用,那也行,你说了算,谁让你是女朋友。
3. python基本数据结构
接下来就是了解一下python里面的各种包,哦不数据结构,了解它们的结构和使用场景。
(1) python的数据机构
python主要的数据结构就两个,其实大部分高级语言,常用的只有这两个,list和map,(在python里map叫dictionary,其实一样,我习惯了叫map,因为它短)。
看一下list是什么,我们看看官方的定义:
Python knows a number of compound data types, used to group together other values. The most versatile is the list, which can be written as a list of comma-separated values (items) between square brackets. Lists might contain items of different types, but usually the items all have the same type.
A mapping object maps hashable values to arbitrary objects.
列表,其实很好懂的吧,就是一串数据,感觉类比成包一定牵强了,类比成一排座位,大家随便坐成一排,按顺序排好的,它们的位置从0开始编号。老师叫人回答问题就是第一个第二个这样,约定俗成的编号规则。
map的话,也可以类比成上面的座位,只是这次的学生不一样,list中的学生没有名字,只能说第几个学生,map里面的学生是有名字的,老师直接点名叫人回答问题,不管你坐在哪里。
所以list是这样的[value1,value2,value3]
,map是这样{'xiaowanzi':person1,'dalianmao':person2}
。
(2)使用场景
那么在编程中,我们在什么情况下会用到这些数据结构呢。
- list
使用list通常是为了遍历里面的数据,然后做一些判断或者其他的处理。
它里面存什么呢,随便都可以,可以存一串数字,一串网址之类。
比如我现在要打开3个文件,文件名分别叫1.txt,2.txt,3.txt,伪代码如下:
#如果不用数据结构:
file1 = '1.txt'
open(file1)
dosomething
file2 = '2.txt'
open(file2)
dosomething
file3 = '3.txt'
open(file3)
dosomething
#是不是觉得好蠢,相似的代码在重复
#下面是使用list的代码
filelist = ['1.txt', '2.txt','3.txt']
for filename in filelist:
open(filename)
dosomething
#是不是方便了很多
- map
map的使用,一般是把数据存到map里面,然后可以按关键字来找数据。
比如我有一个配置文件test.config,文件内容如下:
username=root
password=12345
这个配置文件我需要在程序中读取它,得到用户名和密码,那么我们可以怎么做呢(忽略读文件这个过程,读文件就是读到内容的字符串)
我们用伪代码来表述:
#读取文件内容
content = open('test.config')
#省略字符串截取的方法
#取到了root这个username和12345这个密码
#把用户名存在了一个变量name里面
#密码存在了pwd这个变量里面
#不组装成数据结构的话,可以直接在代码里面使用name和pwd这两个变量
#如果使用map的话,怎么做呢
mymap={}
mymap['username']=name
mymap['password']=pwd
#然后我这个map就保存了这样的数据:{'username':name,'password'=pwd}(实际的内部顺序可能不是这样)
#取用户名
user = mymap['username']
#取密码
pwd = mymap['password']
可能觉得这样好像更加麻烦啊,本来读出了文件,截取了字符串,一切可以直接用了不是很方便吗,为什么要再把它装进map里面。
试想一下,如果这个配置文件有100个配置项,只一个一个操作,是不是就麻烦。而且如果你读取文件返回配置的内容的这个方法是你要提供给别人的接口,你该怎么返回?(方法只能返回一个对象哦)。你说你放在一个大list里面,然后告诉他,我的password在第98个位置,username在67个,你看他会不会骂你。
好,基本的使用场景差不多就这样。实际使用主要也就list和map,再有都是他们的变体。
要了解python的数据类型和数据结构的使用,看这个:Python的数据结构
The end.