前言

        上节课有提到容器的概念,其实容器就是有些数据类型的序列,有的数据是有序的有的数据是无序的或者映射的,那么本篇文章就来主要讲讲python中最常用的字符串,列表,字典,元组这几种数据类型。

1.字符串

        1.1字符串的定义和转义字符

        简单来说使用引号(单引号, 双引号, 三引号)引起来的内容,就是字符串。比如我们常见的'hello world',放在代码里输出它的类型

         我们平常写的一小段字符肯定不只是单纯的做半角字符的分割,我们也会有一些单引号例如英文里的i am的简写 i ‘m,或者一些换行的转移字符,再或者双引号进行引用,那么逐级的向不同引号进行上升,我们就会得到这样的例子,还是用代码来进行体现。   

        1.2字符串的下标和切片

        其实这里的下标也可以称之为索引,通过下面这个图我们把字符串分割为一个个的字符,通过让他们在格子里各自占一格来进行排序。

        图片里我们能够定义一个字符串为str1 = ‘abcdefg’,那么a就是str1[0],g就是str[6],如果是负数进行排序实现字符串里字符下标的定位也可以在代码里实现验证具体如下: 

        字符串里的切片它有点类似我们前面所说的range()函数里的格式,也是使用相似于有开头结尾步长,但是区别就是如下面的语句是用冒号进行表示。

str[start:end:step]

        那么我们用切片来实现什么呢?简单来说切片就相当于把字符串中间的某一部分,或者满足我们步长规则的字符取出来,比如我们想要间隔2个字符取一下,或者我们想要取第三个字符到第七个字符之间的字符,再或者我们想把它倒序输出。只需要记着上面的这个格式,常见的其他格式见下面代码实现部分

        1.3字符串的操作

        这里的操作指的就是字符串后面跟进的一些方法,比如常见的find(),replace(),count(),split(),还有join()。这里的方法就是一些python写好的自带的库里调用的,能够很快捷的针对我们想对字符串进行的一些操作。

        1.3.1find()

        比如find()字符串就能够帮助我们对字符串的内容进行一个查找,能够找到它的下标索引如下图,

        有一个会被用来判断的就是当我们没有找到想要的字符的时候会返回-1,我们就可以利用这个来进行判断,如下图

        1.3.2count()

         这个方法很好理解,就是计算字符串中的某个字符出现了几次。如下图所示

        1.3.3replace()

        这个方法和字面意思一样,对字符串里的字符进行替换,如下图所示

        1.3.4 split()和 join()

        这两个方法需要结合后面列表的一起来解释,首先我们要知道具体的分割方法是参照下面

split(sep)

         这里的sep就是指某个字符,我们会依赖于这么一个字符来进行分割,如代码所示

         而我们join()的方法很显然只能是在列表当中使用了,每一个单独的字符在列表容器当中单个排列,然后进行连接。因为后面就会讲到列表的数据类型介绍,这里我就直接展示具体的代码和结果就好了

2.列表

        2.1定义

        列表可以存放任意类型的数据,可以存放任意多个数据,列表中数据之间使用逗号隔开。我们把存放在列表这个“容器”中的每个数据都称为“元素”,列表是一个有序的且多维的容器。

        在列表当中重点是强调列表的有序和多维,有序很好理解,它和字符串/元组都是可以通过下标法(索引)来进行具体的某个位置元素的获取;多维则是可以通过遍历来实现输出,这里的遍历就是我们前面提到的循环流程当中的for语句了。

        下面图里可以看到我们常用的定义列表的代码语句方法,一共是两种

        很明显,我们能看到第一种方法是有点类似实例化对象的方法这会在后面学到python面向对象方法的时候再来解释,主要是直接声明一个变量例如代码当中的list1来作为一个对象调用实例方法list(),那么实际上它里面的值就是为空的一个列表,另外如果写入了字符串'abcd',为什么输出的不是'abcd'呢,因为这是一个字符串类型的数据在list()的这个方法当中我们实际上要求的是一个可以迭代的iterable的类型,那么这里相当于直接是对字符串进行了split(‘,’)直接进行了分割,这样理解就能够知道list2为什么输出的是每个元素单个的字符了。但是,最常使用的方法还是我们直接进行列表[ ] 的定义,能够直接定义我们想要的东西,比如这里面的list4对应的就是三个不同类型的数据用逗号隔开,如果这里我们和list3一样重新定义一个字符串'abcd',最后的结果就是单独的一个['abcd']输出。

        2.2列表的下标和切片

        列表和字符串一致,列表也能够实现通过下标索引来获取指定位置的数据,通过切片获得新的列表,字符串的切片得到是 新的字符串。如果下标不存在的话就会提示报错。如下图所示

        2.3列表的操作

        2.3.1 index和count方法

        对于列表这种数据类型也有对应的方法来进行操作,比如我们在字符串中有find()的方法对字符串进行下标的定位,那么我们在列表当中也有这样的方法就是index(),另外列表中的cout()也是可以计算形参里某个参数重复出现的次数,当找到后就是返回对应的下标和出现的次数如图所示。 

ps:index就是下标的意思。

        2.3.2 append和pop方法

        对于具体的在列表中进行增加和删除的方法,就是我们所说的append和pop,具体的用法就是列表.append(),列表.()pop。

            这里的append() 添加的数据是往列表的尾部添加数据,而添加完后不会产生新的列表;使用pop()方法在括号里直接加入想要删除列表中数据的下标索引就可以删除比如

         当然了这是我们最常用的插入的方法,不过有的人可能会比较任性就是不想插入在列表的最后,那么我们也有insert() 的函数,()里的是索引,值。有点类似于pop删除方法中的索引和对应想要加入的值,由下图可以理解。

         如果我们只是单纯的想修改列表里的某个位置的数据,那么直接使用我们下标索引的方法去定义就可以了,比如下图想要变成理想的第三个字符为c那么我们执行下面的代码即可:

list1 = ["a","b","d"]

list1[2]="c"

        2.3.3列表的反转和排序

        既然上面的很多方法都和我们的下标索引挂钩,那么我们也可以通过索引切片的方法,直接将整个列表和字符串一样反转,那么有更简单的一个reverse()方法同样可以和切片一样的方法,如下图所示。

        同样的于reverse()方法一样需要先进行声明后的方法还有sort()排序方法,只要我们使用列表.sort()的格式就能将原先的列表按照升序从小到大排列好,本质上在sort()方法当中输入reverse=True就能直接让原先的方法变成对应的降序,具体可以看下图所示

        2.3.4列表的嵌套

        这里的嵌套意思也很明显,说明我们列表当中的数据也是列表。还是直接看下图,因为具体的格式其实就是一个大的列表里面放着几个小的列表,我们要带着以双重打下标索引的形式去对列表嵌套进行一个值的读取。

        我们也可以结合前面的删除,来直接对我们嵌套过的列表进行一个增删改查,例如

3.元组

        3.1 定义

        元组的关键字是tuple,使用的是()。对和方法的()一样,唯一不同于列表[]的是元组无法对里面的数据修改,因此,元组主要是进行查询方法的验证,和字符串/列表都支持下标和切片,和列表相比更适合作为传参和返回值的作用。

        3.2元组的定义方法

        因为和列表很类似,因此元组的定义方法也是使用实例化方法tuple1 = tuple() 以及直接定义tuple1 = () ---空元组。不过和列表一样更常用的是后者直接定义空元组的方法。如下图所示我们来看单个数据情况和多个数据情况,输出元组的类型有什么不同。

        虽然写的内容不少,但是不难看出主要要注意的点就是前面提到的元组支持和列表一样直接用下标索引查看数据,并且能够对其他数据类型的数据进行一个元组数据的转换。

        ps:很重要的一点就是如果元组里只有一个数据的时候,我们又不个单独的数据后面加上逗号隔开的话,我们就会默认对元组数据类型做一个转换,我们会把这个元组的数据变成这个数据对应的数据类型,例如在代码当中我们是对单独的一个字符串数据做一个元组的定义,但是我们并没有在它后面加逗号,那么输出它的类型和它的结果,返回的就是它是字符串类型,输出字符串数据。

        3.3元组的应用

        这里有一点很重要的,元组虽然和列表很相似但是元组是不可变的数据类型,常见的不可变的数据类型还有字符串和整数。数据类型可不可变取决于数据更改之后,是否影响到存储的内存地址,假设数据更改了,那么它的内存地址也变化了说明它就是不可变的类型,像我们的列表和字典都是典型的可变类型,回想一下列表里的方法例如排序sort()和倒序reverse()都是直接把原来定义的列表变量变化了,而我们字符串里的列表变化并没有影响到。

        相对来说,元组的应用没有列表和字典这么多。

4.字典

        4.1字典的定义

        字典的关键字是dict,使用{ }来表示,也是和我们先前的列表/元组相似,只要记住关键字及对应的框架表示即可。

        在字典{ }当中的数据是以键值对的形式存在的,如果有了解接口测试的朋友应该知道我们有一种数据类型是json数据,它就是以键值对的形式存在的,kev:value。那么字典当中就是多个键值对的存储,一个键值对可以看成是一组数据,我们通常将每组数据用逗号隔开。ps:字典当中的键主要是使用 字符串类型,因此键的值都带着双引号来作为定义,当然也可以使用数字来做定义。

        4.2字典的定义方法

        字典的定义方法也和前面列表的定义,元组的定义相似,这里我就直接讲常用的定义方法了。举例:dict1 = {"name","小明","age":18,"height":188,"is_man":True}。

        4.3字典的增删改查与遍历

        字典其实和列表的操作方法很相近,除了格式不太相似其他都跟列表差不多,可以进行数据的增加可以进行删除修改和遍历下标索引。如下图所示,简单看我们对字典的增删改

        很明显可以看到,我们对字典的操作更多是直接针对字典当中的键也就是key,在列表中我们是使用[下标索引]来进行修改,在这里我们用的是[key]直接对键值来操作,比如说想要修改字典当中的age键我们就可以使用 dict["age"]=value,如果原本是没有的话就相当于添加否则就是修改。

        那么字典和列表相似的一些特征,有顺序且是可操作的数据类型容器,那么这样一个容器就和range()一样,它也能跟列表一样作为我们for循环的一个范围。例如下图所示, 

        items()输出的是整个字典里的键值对数据,另外的keys()和values()是输出为每组数据的键或者键值。        

         ps:在写字典数据类型的时候,每组数据的键值对写完后都要用逗号间隔开,另外我们也可以把它写成JSON的数据类型格式,比如转换成下面的JSON数据格式类型。

5.总结

        目前已经知道了python的基础语法,python存储数据的一些容器,python语言执行的流程体系,已经能够实现很多需求。还是那句话要多敲代码多去验证,只是眼睛看懂了并不一定能够真的能够手撕,后面会讲函数的部分,能够导入模块导入方法,更好的更高效的使用方法去完成需求。

Logo

一站式 AI 云服务平台

更多推荐