美文网首页
【Python从入门到精通】(五)Python内置的数据类型-序

【Python从入门到精通】(五)Python内置的数据类型-序

作者: 码农飞哥 | 来源:发表于2021-10-30 20:21 被阅读0次

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
    本文主要介绍Python数据类型中序列和字符串,文末有彩蛋哦
    干货满满,建议收藏,用到时常看常新。 小伙伴们如有问题及需要,请留言告诉我哦~ ~ ~。

    前言

    上一篇文章我们介绍了Python内置数据类型中几个属于数字的数据类型。这篇文章就开始介绍序列类型。本文首先会介绍序列的基本概念和通用的方法,接着会介绍Python中的字符串的概念和基本用法。

    序列

    序列是什么?

    序列(sequence)指的是一块可存放多个元素的内存空间,这些元素按照一定的顺序排列。每个元素都有自己的位置(索引),可以通过这些位置(索引)来找到指定的元素。如果将序列想象成一个酒店,那么酒店里的每个房间就相当于序列中的每个元素,房间的编号就相当于元素的索引,可以通过编号(索引)找到指定的房间(元素)。

    有哪些序列类型呢?

    了解完了序列的基本概念,那么在Python中一共有哪些序列类型呢?如下图所示:


    在这里插入图片描述

    从图中可以看出在Python中共有7种序列类型,分别是文本序列类型(str);二进制序列类型 bytes和bytearray;列表(list);元组(tuple);集合类型(set和frozenset);范围类型(range)以及字典类型(dict)。

    1. 按照能存储的元素划分

    按照能存储的元素可以将序列类型划分为两大类:分别是:容器序列和扁平序列
    容器序列:即可容纳不同数据类型的元素的序列;有 list;tuple;set;dict
    举个栗子:

    list=['runoob',786,2.23,'john',70.2]
    

    这里的list保存的元素有多种数据类型,既有字符串,也有小数和整数。
    扁平序列:即只能容纳相同数据类型的元素的序列;有bytes;str;bytearray,以str为例,同一个str只能都存储字符。

    2. 按照是否可变划分

    按照序列是否可变,又可分为可变序列和不可变序列。
    这里的可变的意思是:序列创建成功之后,还能不能进行修改操作,比如插入,修改等等,如果可以的话则是可变的序列,如果不可以的话则是不可变序列。
    可变序列有列表( list);字典(dict)等,
    不可变的序列有元祖(tuple),后面的文章会详细的对这些数据类型做详细介绍。

    序列都有哪些方法以及特性呢?

    序列的索引

    在介绍序列概念的时候,说到了序列中元素的索引,那么什么是序列的索引呢?其实就是位置的下标。 如果对C语言中的数组有所了解的话,我们知道数组的索引下标都是从0开始依次递增的正数,即第一个元素的索引下标是0,第n个元素的索引下标是n-1。序列的索引也是同理,默认情况下都是从左向右记录索引,索引值从0开始递增,即第一个元素的元素的索引值是0,第n个元素的索引值是n-1。如下图所示:

    在这里插入图片描述
    当然与C语言中数组不同的是,Python还支持索引值是负数,该类的索引是从右向左计数。换句话说,就是从最后一个元素开始计数,从索引值-1开始递减,即第n个元素的索引值是-1,第1个元素的索引值是-n,如下图所示:
    在这里插入图片描述

    序列切片

    切片操作是访问序列元素的另一种方式,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列。切片操作的语法格式是:

    sname[start : end : step]
    

    各个参数的含义分别是:

    1. sname: 表示序列的名称
    2. start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,不指定的情况下会默认为0,也就是从序列的开头开始切片。
    3. end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度。
    4. step: 表示步长,即在切片过程中,隔几个存储位置(包括当前位置)取一次元素,也就是说,如果step的值大于1,比如step为3时,则在切片取元素时,会隔2个位置去取下一个元素。
      还是举个栗子说明下吧:
    str1='好好学习,天天向上'
    # 取出索引下标为7的值
    print(str1[7])
    # 从下标0开始取值,一直取到下标为7(不包括)的索引值
    print(str1[0:7])
    # 从下标1开始取值,一直取到下标为4(不包括)的索引值,因为step等于2,所以会隔1个元素取值
    print(str1[1:4:2])
    # 取出最后一个元素
    print(str1[-1])
    # 从下标-9开始取值,一直取到下标为-2(不包括)的索引值
    print(str1[-9:-2])
    

    运行的结果是:

    向
    好好学习,天天
    好习
    上
    好好学习,天天
    

    序列相加

    Python支持类型相同的两个序列使用"+"运算符做想加操作,它会将两个序列进行连接,但是不会去除重复的元素,即只做一个简单的拼接。

    str='他叫小明'
    str1='他很聪明'
    print(str+str1)
    

    运行结果是:他叫小明他很聪明

    序列相乘

    Python支持使用数字n乘以一个序列,其会生成一个新的序列,新序列的内容是原序列被重复了n次的结果。

    str2='你好呀'
    print(str2*3)
    

    运行结果是:你好呀你好呀你好呀 ,原序列的内容重复了3次。

    检查元素是否包含在序列中

    Python中可以使用in关键字检查某个元素是否为序列中的成员,其语法格式为:

    value in sequence
    

    其中,value表示要检查的元素,sequence表示指定的序列。
    举个栗子:查找字是否在字符串str1中。

    str1='好好学习,天天向上'
    print('天' in str1)
    

    运行结果是:True

    序列相关的内置函数

    函数 功能 适用场景
    len() 计算序列的长度,即返回序列中包含了多少个元素 适用于列表,元组、字典、集合、字符串等
    max() 找出序列中的最大元素,针对序列中元素是数字的情况 。 适用于列表,元组、字典、集合、range等
    min() 找出序列中的最小元素,针对序列中元素是数字的情况 适用于列表,元组、字典、集合、range等
    list() 将序列转换为列表 适用于字符串
    str() 将序列转换为字符串 适用于列表,元组,数字
    sum() 对序列中的元素求和,注意,对序列使用sum()函数时,做加和操作的必须全部是数字,不能是字符或者字符串,因为解释器无法判定事要做连接操作,还是做加和操作 适用于列表,元组、集合、range等
    sorted() 对元素进行排序 适用于列表,元组、字典、集合、range,字符串等
    reversed() 反向序列中的元素 适用于列表,元组、字典、集合、range,字符串等
    enumerate() 枚举列表元素,返回枚举对象,其中每个元素包含下标和值的元组。该函数对元组/字符串同样有效。 适用于列表,元组、字典、集合、range,字符串等

    依然是举例说明:

    str3='码农飞哥'
    print('字符串的长度=',len(str3))
    print('转成列表=',list(str3))
    print('调用enumerate函数',enumerate(str3))
    print('遍历enumerate函数的结果:')
    for item in enumerate(str3):
        print(item)
    
    print('遍历reversed函数的结果:')
    for item in reversed(str3):
        print(item)
    
    list2=['码农','飞哥']
    print('列表转字符串=',str(list2))
    list1=[12,20,5,8,1]
    print('最大值=',max(list1))
    print('最小值=',min(list1))
    print('求和结果=',sum(list1))
    print('排序结果=',sorted(list1))
    

    运行结果是:

    字符串的长度= 4
    转成列表= ['码', '农', '飞', '哥']
    调用enumerate函数 <enumerate object at 0x7f90818cd540>
    遍历enumerate函数的结果:
    (0, '码')
    (1, '农')
    (2, '飞')
    (3, '哥')
    遍历reversed函数的结果:
    哥
    飞
    农
    码
    列表转字符串= ['码农', '飞哥']
    最大值= 20
    最小值= 1
    求和结果= 46
    排序结果= [1, 5, 8, 12, 20]
    

    字符串

    前面介绍序列时,大部分例子都是用字符串来表示的,那么就来认识一下字符串吧!

    字符串的定义

    由若干个字符组成的集合就是一个字符串(str),Python中的字符串必须由双引号""或者单引号''包围。其语法格式是:

    "字符串内容"
    '字符串内容'
    

    如果字符串中包含了单引号需要做特殊处理。比如现在有这样一个字符串
    str4='I'm a greate coder' 直接这样写有问题的。
    处理的方式有两种:

    1. 对引号进行转义,通过转义符号\进行转义即可:
    str4='I\'m a greate coder'
    
    1. 使用不同的引号包围字符串
    str4="I'm a greate coder"
    

    这里外层用双引号,包裹字符串里的单引号。

    原始字符串的处理

    有时候我们并不想字符串被转义,这种情况下可以使用在字符串的开头加上r前缀,就变成了原始字符串,具体格式是:

    str1 = r'原始字符串内容'
    str2 = r"原始字符串内容"
    

    举个例子吧:

    str4=r'码农\'飞哥真棒'
    str5=r"码农\'飞哥真棒"
    print(str4)
    print(str5)
    

    运行结果是:

    码农\'飞哥真棒
    码农\'飞哥真棒
    

    字符串的分割方法

    在实际开发中,我们经常要根据文件名获取文件的后缀名,这该如何处理呢?

    path = "test_user_info.py"
    

    现在要提取后缀名py,其实可以通过split方法,将字符串分割成列表(list),然后从列表中取值,就像下面这样:

    suffix = path.split(".")[1]
    print("suffix: {}".format(suffix))
    

    字符串拼接的方法

    字符串拼接的方法有三种,分别是:

    1. 通过join方法
      通过join方法的语法格式是str.join(iterable),其中join的条件是 iterable可迭代的,并且列表元素是字符串(str)。就是对iterable中的每个元素进行遍历,然后拼接到str上,这里的str是用于指定合并时的分隔符,如果想拼接之后的字符串是逗号分割,那么写法是
    2. 通过format方法
      format 方法是通过占位符占据要拼接的字符串的位置。
    3. 通过+运算符
      现有字符串码农飞哥好,,要求将字符串码农飞哥牛逼拼接到其后面,生成新的字符串码农飞哥好,码农飞哥牛逼
    str6 = '码农飞哥好,'
    # 使用+ 运算符号
    print('+运算符拼接的结果=',(str6 + '码农飞哥牛逼'))
    #使用join拼接字符串
    list2 = ['码', '农', '飞', '哥', '牛', '逼']
    print('无符号分割join的拼接结果=', ''.join(list2))
    print('逗号分割join的拼接结果=',   ','.join(list2))
    # 使用format拼接
    str7 = str6 + '{0}'
    print('format拼接的结果=',str7.format('码农飞哥牛逼'))
    str8=str6+'{0}{1}'
    print('format拼接的结果=',str8.format('码农飞哥','牛逼'))
    

    运行结果是;

    +运算符拼接的结果= 码农飞哥好,码农飞哥牛逼
    无符号分割join的拼接结果= 码农飞哥牛逼
    逗号分割join的拼接结果= 码,农,飞,哥,牛,逼
    format拼接的结果= 码农飞哥好,码农飞哥牛逼
    format拼接的结果= 码农飞哥好,码农飞哥牛逼
    

    大家想想如果还直接使用str6.join('码农飞哥牛逼') 最后的输出结果是啥呢?

    str6 = '码农飞哥好,'
    print(str6.join('码农飞哥牛逼'))
    print(str6)
    

    运行结果是

    码码农飞哥好,农码农飞哥好,飞码农飞哥好,哥码农飞哥好,牛码农飞哥好,逼
    码农飞哥好,
    

    就是将码农飞哥牛逼遍历,然后每个字符拼接到str6前面,所以前面的 str6是作为一个拼接的分隔符号的。
    需要特别注意的是拼接后的字符串是新的字符串,而不是在原有的字符串上修改。所以我们看到原字符串str6在拼接后并没有改变。这个特新跟Java中的String是一样,那么有小伙伴知道str不可变的原因的?欢迎留言哦。
    所以在遍历拼接字符串的时候要特别注意赋值,就像这样:

    list = ['码', '农', '飞', '哥', '牛', '逼']
    str_list = str("")
    for str1 in list:
        str_list = str_list + "file {0}\n".format(str1)
    print(str_list)
    

    总结

    本文详细介绍了Python内置数据类型中的序列类型,介绍了序列的基本概念,序列就是一块存储多个元素的内存空间,这些元素按照一定的顺序排列,介绍了序列的通性,可以把序列当成其他语言中的数组,可以把序列想象成一个酒店。序列通过索引来查找里面的值。最后介绍了字符串,希望对读者朋友们有所帮助。

    牛刀小试一下吧

    现有如下的字符串

    str6='程序猿正在创造世界'
    
    1. 如何根据str6输出结果为正创 的字符串?
    2. 如何根据str6输出结果为界世造创的默默猿序程的字符串呢?
      欢迎知道的小伙伴踊跃留言,我们一起交流讨论。参考答案详见文尾:

    参考答案

    现有如下的字符串

    str6='程序猿正在创造世界'
    
    1. 如何根据str6输出结果为正创 的字符串?
    2. 如何根据str6输出结果为界世造创的默默猿序程的字符串呢?

    这里主要考察的是字符串的切片以及字符串的拼接等知识点。这里还用到了反转函数。

    1. 答案一:
    str6 = '程序猿正在创造世界'
    # 索引的坐标是从0开始的,3表示取第4个字符串,6表示到第七个字符串(不包括),步长是2
    print(str6[3:6:2])
    # 首先获取反转之后的字符串
    str2 = ''.join(reversed(str6))
    #将字符串拼接成我们想要的字符
    print(str2[0:4] + '的默默' +str2[6:9])
    
    1. 答案二:
    str6 = '程序猿正在创造世界'
    # 第一题
    print(str6[3]+str6[5])
    # 第二题
    str6=str6[0:3]+str6[5:]
    list2 = list(reversed(str6))
    list2.insert(4, '的默默')
    print(''.join(list2))
    

    我是码农飞哥,再次感谢您读完本文
    全网同名【码农飞哥】。不积跬步,无以至千里,享受分享的快乐
    我是码农飞哥,再次感谢您读完本文

    相关文章

      网友评论

          本文标题:【Python从入门到精通】(五)Python内置的数据类型-序

          本文链接:https://www.haomeiwen.com/subject/ztcnaltx.html