Python之字符串精讲(上)

news2024/9/28 7:19:32

前言

字符串是所有编程语言在项目开发过程中涉及最多的一个内容。大部分项目的运行结果,都需要以文本的形式展示给客户,曾经有一位久经沙场的老程序员说过一句话:“开发一个项目,基本上就是在不断的处理字符串”。下面对Python中常用的字符串操作方法进行介绍。


一、拼接字符串

使用 “+” 运算符完成对多个字符串的拼接,并产生一个新的字符串对象

代码示例如下图所示:

在这里插入图片描述

注意:字符串不允许直接与其他类型的数据拼接,否则会报错。

例如,使用下图的代码将字符串与数字拼接会产生报错:

在这里插入图片描述

如果要解决该问题,可以先将整数转为字符串,然后以拼接字符串的方法输出该内容。将整数转为字符串可以使用 str() 函数,修改后的代码及运行结果如下图所示:

在这里插入图片描述


二、计算字符串的长度

由于不同字符所占字节数不同,所以要计算字符串的长度,需要先了解各字符所占的字节数。在Python中,数字、英文、小数点、下划线和空格均占一个字节;一个汉字可能会占 2~4 个字节,具体占几个字节取决于采用的编码方式。汉字在 GBK/GB2312 编码中占 2 个字节,在 UTF-8 编码中占用 3 个字节。下面以 Python 默认的 UTF-8 编码为例进行说明,即一个汉字占 3 个字节,如下图所示:

在这里插入图片描述

在Python中,提供了 len() 函数计算字符串的长度,语法格式如下:

len(string)

其中,string 代表要统计长度的字符串。代码示例如下图所示:

在这里插入图片描述

从上面结果中可以看出,默认情况下,通过 len() 函数计算字符串的长度时,不区分英文、数字和汉字,所有字符都按一个字符计算。

但在实际开发中,有时需要获取字符串实际所占的字节数,即如果采用 UTF-8 编码,汉字占 3 个字节,采用 GBK 或者 GB2312 时,汉字占 2 个字节。这时,可以通过使用 encode() 方法(后面博客会讲到)进行编码后再获取字节数。例如,如果要获取采用 UTF-8 编码的字符串的长度,可以使用如下图所示代码:

在这里插入图片描述

运行结果中显示 27 个字节,是因为汉字加中文标点符号共 7 个,占 21 个字节,英文字母占 6 个字节,共 27 个字节。

如果要获取采用 GBK 编码的字符串长度,使用如下图代码:

在这里插入图片描述

结果显示 20 字节,是因为汉字加中文标点符号共 7 个,占 14 个字节,英文字母占 6 个字节,共 20 个字节。


三、截取字符串

由于字符串也属于序列,所以要截取字符串,可以采用切片方法实现。通过切片方法截取字符串的语法格式如下:

string[start : end : step]

参数说明

  • string:表示要截取的字符串。
  • start:表示要截取的第一个字符的索引(包括该字符),如果不指定,则默认为 0。
  • end:表示要截取的最后一个字符的索引(不包括该字符),如果不指定则默认为字符串的长度。
  • step:表示切片的步长,如果省略,则默认为 1,当省略该步长时,最后一个冒号也可以省略。

字符串的索引同序列的索引是一样的,也是从 0 开始,并且每个字符占一个位置。如下图所示:

在这里插入图片描述

例如,定义一个字符串,应用切片方法截取不同长度的子字符串输出,代码如下:

song = '曾梦想仗剑走天涯,看一看世界的繁华'
song_1 = song[2]  # 截取第3个字符
song_2 = song[7:]  # 从第8个字符截取
song_3 = song[:4]  # 从左边开始截取4个字符
song_4 = song[10:15]  # 截取第11到第15个字符
print('原字符串:', song)
print(song_1)
print(song_2)
print(song_3)
print(song_4)

执行代码后,显示内容如下:

原字符串: 曾梦想仗剑走天涯,看一看世界的繁华
想
涯,看一看世界的繁华
曾梦想仗
一看世界的

四、分割、合并字符串

在Python中,字符串对象提供了分割合并字符串的方法。分割字符串是把字符串分割为列表,而合并字符串是把列表合并为字符串,分割字符串和合并字符串可以看作是互逆操作。

1. 分割字符串

字符串对象的 split() 方法可以实现字符串分割,就是把一个字符串按照指定的分隔符切分为字符串列表。该列表的元素中,不包括分隔符split() 方法的语法格式如下:

str.split(sep, maxsplit)

参数说明

  • str:表示要分割的字符串。
  • sep:用于指定分隔符,可以包含多个字符,默认为 None(即所有空字符,比如空格、换行"\n"、制表符"\t") 。
  • maxsplit:可选参数,用于指定分割的次数,如果不指定或者指定为 -1 ,则分割次数没有限制,否则返回结果列表的元素个数,个数最多为 maxsplit+1。
  • 返回值:分隔后的字符串列表。该列表的元素是以分隔符为界限分割的字符串(不含分隔符),当该分隔符前面(或者与前一个分隔符之间)无内容时,将返回一个空字符串元素。

例如,指定一个字符串,然后应用 split() 方法根据不同的分隔符进行分割,代码如下:

a = 'CSDN开发社区网址 >>> https://www.csdn.net'
print('原字符串:', a)
print(a.split())  # 采用默认分隔符进行分割
print(a.split('>>>'))  # 采用多个字符进行分割
print(a.split('.', maxsplit=1))  # 采用.分割,并且只分割一次

运行后结果如下:

原字符串: CSDN开发社区网址 >>> https://www.csdn.net
['CSDN开发社区网址', '>>>', 'https://www.csdn.net']
['CSDN开发社区网址 ', ' https://www.csdn.net']
['CSDN开发社区网址 >>> https://www', 'csdn.net']

2. 合并字符串

合并字符串与拼接字符串不同,它会将多个字符串采用固定的分隔符连接在一起。例如,字符串 “张三=李四=王五=赵六”,就可以看作是通过分隔符 “=”[‘张三’, ‘李四’, ‘王五’, ‘赵六’] 列表中所有字符串合并为一个字符串的结果。

合并字符串可以使用字符串对象的 join() 方法实现,语法格式如下:

strnew = string.join(iterable)

参数说明

  • strnew:表示合并后生成的新字符串。
  • string:字符串类型,用于指定合并时分隔符。
  • iterable:可迭代对象,该迭代对象中的所有元素(字符串表示)将被合并为一个新的字符串。

代码示例如下图所示:

在这里插入图片描述


总结

以上讲的字符串常用方法中,截取分割合并这三种方法是开发中使用频率最高的,尤其是在爬虫领域。由于字符串的用法非常之多,考虑到零基础大白容易搞混,所以博主分为了上、下两部分来讲,下半部分会继续讲字符串的剩余常用方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/339689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自命为缓存之王的Caffeine(3)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~缓存的存储空间是远远小于磁盘的。所以对于有些过期的数据,就需要定期进行清理,腾出存储空间。Caffeine又是怎么做的呢?Caffei…

SpringBoot+Vue在线小说系统

简介:本项目采用了基本的springbootvue设计的在线小说系统。详情请看截图。经测试,本项目正常运行。本项目适用于Java毕业设计、课程设计学习参考等用途。 特别说明:本系统设计网络爬虫,遵循爬虫规则,此项目用于学习&a…

2023关键词:挑战

未失踪人口回归… 好久不见,不经意间拖更2个多月。今天周末,外面淅淅沥沥下着小雨,这种窝在床上的时刻最适合写点东西了。 但是建议大家在办公或者写博客的时候尽量还是端正坐姿,我就是因为喜欢这样靠在床背上,长时间…

Spring Security 从入门到精通

前言 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多,因为相比与Spr…

Vue3+ElementPlus+koa2实现本地图片的上传

一、示例图二、实现过程利用Koa2书写提交图片的后台接口这个模块是我写的项目中的其中一个板块——上传图片,这个项目的后台接口主要是是使用了后端的Koa2框架,前端小伙伴想要试着自己书写一些增删改查的接口可以从这个入手,Koa2用来了解后端…

力扣HOT100 11-15

11.盛水最多的容器 思路:最大水量 底边 * 高度。较短的一边控制最大水量,因此,采用双指针的方式,左、右指针指向开始和末尾,逐个向中间移动,判断左右指针所指向的高度哪个更低,它就向中间移动一…

ubuntu中解决Failed to connect to 127.0.0.1 port xxxxx: Connection refused

ubuntu中解决Failed to connect to 127.0.0.1 port xxxxx: Connection refused 方法一 查看一下代理 git config --global http.proxy git config --global https.proxy 有就取消,没有就换一种方法 git config --global --unset http.proxy git config --global --unse…

计算机网络之http03:HTTPS RSA握手解析

不同的秘钥交换算法,握手过程可能略有差别 上文对HTTPS四次握手的学习 SSL/TLS Secure Sockets Layer/Transport Layer Security 协议握手过程 四次通信:请求服务端公钥 2次 秘钥协商 2次 (1)ClientHello请求 客户端向服务端发送client…

状态机设计举例

⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥文章和代码已归档至【Github仓库&#xf…

JavaScript内置支持类Array

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>内置支持类Array</title> </head> <body bgcolor"antiquewhite"> <script type"text/javasc…

【Spark分布式内存计算框架——Spark Core】8. 共享变量

第七章 共享变量 在默认情况下&#xff0c;当Spark在集群的多个不同节点的多个任务上并行运行一个函数时&#xff0c;它会把函数中涉及到的每个变量&#xff0c;在每个任务上都生成一个副本。但是&#xff0c;有时候需要在多个任务之间共享变量&#xff0c;或者在任务(Task)和…

T35,没有token是什么意思?

描述 输入一个升序数组 array 和一个数字S&#xff0c;在数组中查找两个数&#xff0c;使得他们的和正好是S&#xff0c;如果有多对数字的和等于S&#xff0c;返回任意一组即可&#xff0c;如果无法找出这样的数字&#xff0c;返回一个空数组即可。 数据范围: 0≤len(array)≤…

常规网页布局

单列布局1 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>单列布局1-头主尾等宽</title><style>.container {max-width: 960px; /*设置最大宽度为固定值*/margin: 0 auto; /*设置内部子…

Delphi 中TImageCollection和TVirtualImageList 控件实现high-DPI

一、概述RAD Studio允许你通过使用TImageCollection组件和TVirtualImageList组件&#xff0c;在你的Windows VCL应用程序中包含缩放、高DPI、多分辨率的图像。这两个组件位于Windows 10面板中&#xff1a;注意&#xff1a;如果你使用FireMonkey进行跨平台应用&#xff0c;请看T…

用VSCode在共用服务器上使用连接自己的Docker容器进行开发

问题描述 我们实验室有一台很牛的Linux服务器&#xff0c;核多卡多硬盘大&#xff0c;它是大家共用的&#xff0c;组里给我们每个人都创建了一个普通用户&#xff0c;没有sudo权限&#xff0c;所以不能用apt。 但是每个人对开发环境的需求都是不一样的&#xff0c;比如我要用…

年前无情被裁,面试大厂的这几个月…

2月份了&#xff0c;金三银四也即将来临&#xff0c;在这个招聘季&#xff0c;大厂也开始招人&#xff0c;但还是有很多人吐槽说投了很多简历&#xff0c;却迟迟没有回复… 另一面企业招人真的变得容易了吗&#xff1f;有企业HR吐槽&#xff0c;简历确实比以前多了好几倍&…

【手写 Vuex 源码】第五篇 - Vuex 中 Mutations 和 Actions 的实现

一&#xff0c;前言 上一篇&#xff0c;主要介绍了 Vuex 中 getters 的实现&#xff0c;主要涉及以下几个点&#xff1a; 将选项中的 getters 方法&#xff0c;保存到 store 实例中的 getters 对象中&#xff1b;借助 Vue 原生 computed&#xff0c;实现 Vuex 中 getters 的数…

有趣的Hack-A-Sat黑掉卫星挑战赛——跟踪卫星

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加&#xff0c;太空已经成为国家赖以生存与发展的命脉之一&#xff0c;凝聚着巨大的国家利益&#xff0c;太空安全的重要性日益凸显[1]。而在信息化时代&#xff0c;太空安…

TMC2660驱动及调试记录

TMC2660 一款优秀的电机驱动芯片&#xff0c;驱动简单。 理论就看这篇&#xff1a;TMC260/TMC2660/TMC262步进电机驱动 或者直接看手册&#xff0c;手册也不复杂。 使用SPI通信&#xff0c;通过SPI配置参数。支持直接使用SPI和Step/Dir方式控制两种控制步进电机的方式。 TMC…

【C语言】数据结构-二叉树

主页&#xff1a;114514的代码大冒险 qq:2188956112&#xff08;欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ &#xff09; Gitee&#xff1a;庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 引入 我们之前已经学过线性数据结构&#xff0c;今天我们将介绍非线性数据结构----树 树是一种非线性的…