Python程序设计——字符串处理的特殊方法

学习目标:

  1. 学习如何创建字符串
  2. 使用len、min和max函数获取一个字符串的长度、串中的最大和最小的字符
  3. 使用下标运算符([])访问字符串中的元素
  4. 使用截取运算符str[ start:end]从较长的字符串中得到一个子串
  5. 使用+运算符连接两个字符串,通过*运算符复制一个字符串
  6. 使用in和not in运算符判断一个字符串是否包含在另一个字符串内
  7. 使用比较运算符(==、! =、<、<=、>、>=)对字符串进行比较
  8. 使用for循环迭代字符串中的字符
  9. 使用方法isalnum、isalpha、isdigit、isidentifier、islower、isupper 和isspace来测试字符串
  10. 使用方法endswith、startswith、find、rfind 和count搜索子串
  11. 使用方法capitalize、lower、upper、title、swapcase和replace 转换字符串
  12. 使用方法lstrip、rstrip 和strip从一个字符串的左侧或右侧删除空格
  13. 使用方法center、ljust、rjust 和format格式化字符串
  14. 在应用程序( CheckPalindrome、Hex ToDecimalConversion)的开发过程中应用字符串
  15. 为运算符定义特殊的方法
  16. 设计Rational类表示有理数

一、引言

        关键点:本章将重点放在类的设计上,它使用Python中的str类为例并探索Python中特殊方法的作用。

        前一篇介绍了关于类和对象的一些重要概念。我们已经学习了如何定义一个类,以及如何创建和使用对象。str 类不仅在表示字符串方面很有用,而且它也是一个很好的类设计的例子。本文我们将更深人地讨论str类。在Python语言中特殊方法起着非常重要的作用。这里也会介绍一些特殊方法和运算符重载,以及使用特殊方法设计类。

二、str 类

关键点:一个str对象是不可变的;这也就是说,一旦创建了这个字符串,那么它的内容是不可变的。

2.1、创建字符串

你可以使用构造函数构建字符串,如下所示:

s1 = str() # Create an empty string object
s2 = str("Welcome") # Create a string object for We lcome

Python提供了一个简单语法,它通过使用字符串值创建一一个字符串。例如:

s1 = " "# Same as s1= str()
s2 = "Welcome" # Same as s2 = str("Welcome")

        一个字符串对象是不可变的: 一旦创建一个字符串对象出来,那么它的内容就不会再改变。为了优化性能,Python 使用一个对象来表示具有相同内容的字符串。如图所示,s1和s2都指向同一个字符串对象,它们都有着相同的id数。

        这个动作对Python库中的所有不可变对象都是真的。例如: int 是一种不可变类。两个具有相同值的int对象实际上是共享了相同的对象,如图所示:

2.2、处理字符串的函数

        Python的一些内置函数可以和字符串一起使用。你可以使用len函数来返回一个字符串中的字符个数,而max和min函数返回字符串中的最大和最小字符。下面是一些例子:

>>> S = "We1come"
>>> len(s)
7
>>> max(s)
'o'
>>> min(s)
'W'
>>>

        因为字符串s有7个字符,len(s)返回7 。注意:小写字母的ASCII码值要高于小写字母的ASCII码值,所以,max(s) 返回o ,而min(s)返回W 。

2.3、下标运算符 [ ]

一个字符串是一个字符序列。可以使用下面的语法通过下标运算符访问字符串中的一个字符:

s[index]

下标是基于0的;也就是说,它们的范围从0到len(s)-1,如图所示。

2.4、截取运算符 [start : end]

        截取运算符通过使用语法s[start:end]返回字符串其中的一段。这一段就是从下标start到下标end-1的一个子串。例如:

>>> s = "Welcome"
>>> s[1 : 4]
elc

s[1:4]返回从下标1到下标3的子串。

        起始下标或结束下标都可以被忽略。在这种情况下,默认的起始下标是0,而结束下标是最后一个下标。例如:

>>> S = "Welcome"
>>>s[ :6]
'Welcom'
>>> s[4: ]
'ome'
>>>s[1:-1]
elcom
>>>

        在第2行中,s[ :6] 和s[0:6]是一样的,都返回的是从下标0到下标5的子串。在第4行中,s[4: ]和s[4:7]是一样的,都返回的是从下标4到下标6的子串。你也可以在截取字符串的过程中使用负下标。例如,在第6行中,s[1:-1]s[1:-1+len(s)]是一样的

        注意:如果截取操作s[i:j] 中的下标(i或j)是负数,那么就用len(s)+index来替换下标。如果j>len(s),那么j就会被设置成len(s)。如果i>=j,那么截取的子串就会成为空串。

2.5、连接运算符+和复制运算符*

        你可以使用连接运算符+组合或连接两个字符串。你也可以使用复制运算符*来连接相同的字符串多次。下面是一 些例子:

>>> s1 = "Welcome"
>>> s2 = "Python"
>>> s3 = s1 + "to" + s2
>>> s3
'Welcome to Python'
>>> s4 = 3 * s1
>>> s4
'WelcomeWelcomeWelcome'
>>> s5 = s1 * 3
>>>s5
'WelcomeWelcomeWelcome'
>>>

注意: 3*s1和s1*3具有相同的效果。

2.6、in和notin运算符

你可以使用in和not in操作来测试一个字符串 是否在另一个字符串中。下面是一些例子:

>>> s1 = "Welcome" 
>>> "come" in s1
True
>>> "come" not in s1
False
>>>

下面是另一个例子:

s = input("Enter a string: ")
if "Python" in s:print("Python","is in", s)
else:print("Python","is not in", s)

        如果你在运行这个程序的时候将字符串“WelcometoPython”作为输入,这个程序就应该显示:
        python is in Welcome to Python.

2.7、比较字符串

        你可以使用比较运算符来对字符串进行比较(已经介绍过==、!=、 >、<. >=和<=)。Python是通过比较字符串中对应的字符进行比较的,比较是通过计算字符的数值代码实现的。例如,a比A大,因为a的数值代码比A的数值代码大。

        假设你需要比较字符串s1("Jane")和s2("Jake")。首先,比较s1和s2中的首字符(J和J)。因为它们是一样的,所以比较它们的第二个字符(a和a)。因为它们也是一样的,所以比较它们的第三个字符(n 和k)。因为n的ASCII码值要大于k的,所以s1是大于s2的。

        下面是一些例子:

>>>'green' == 'glow'
False
>>> "green" != "g1ow"
True
>>> "green" > "glow"
True
>>> "green" >= "glow"
True
>>> "green" < "g1ow"
False
>>> "green" <= "g1ow"
False
>>> "ab" <= "abc"
True
>>>

2.8、迭代字符串

        一个字符串是可迭代的。这意味着你可以使用一个for循环来顺序遍历字符串中的所有字符。例如,下面的代码显示了字符串s中的所有字符:

for ch in s:print(ch)

你可以将这段代码读作“对于s中的每个字符ch,都打印ch”。

        这个for循环没有使用下标来访问字符。但是,如果你想以不同顺序遍历字符,那么你仍然必须使用下标。例如,下面的代码显示了字符串奇数位置的字符:

for i in range(0, len(s), 2):print(s[i])

        这段代码使用变量i作为字符串s的下标。i的初始值是0,然后,在它达到或超过len(s)之前每次增加2。对于每个i值,都打印s[i]。

2.9、测试字符串

2.10、搜索字串

2.11、转换字符串

 注意:如同之前所述,字符串是不可变的。str 类中没有方法能改变字符串的内容,这些方法都是创建了新的字符串。

2.12、删除字符串中的空格

        你可以使用下图中的方法从字符串的前端、末端或者两端来删除字符串中的空格。回
顾一下,字符' '、\t、\f、\r和\n都被称作空白字符。

        注意:删除空白字符的方法只能去掉字符串前后两端的空白字符,并不能删除被非空白字符包围的空白字符。

        提示:在输入字符串上应用strip()方法来确保删除输入的末尾任何不需要的字符,这是很好的经验。

2.13、格式化字符串


 下面是使用center、ljust和rjust方法的一些例子:

>>> s = "Welcome"
>>> s1 = s.center(11)
>>>s1
'  Welcome  '
>>> s2 = s.ljust(11)
>>>>s2
'Welcome       '
>>> s3 = s.rjust(11)
>>;>>s3
'      Welcome '
>>>

        在第2行,s.center(11)将字符串s放在占位11个字符的字符串中央。在第5行,s.ljust(11)将字符串s放在占位11个字符的字符串左端。在第8行,s.rjust(11) 将字符串s放在占位11个字符的字符串右端。

三、运算符重载和特殊方法

关键点: Python允许为运算符和函数定义特殊的方法来实现常用的操作。Python使用一种独特方式来命名这些方法以辨别它们的关联性。

        在之前,我们已经学会了如何使用完成字符串操作的运算符。可以使用运算符+来结合两个字符串,而运算符*可以结合同一字符串多次,关系运算符(==、!=.<.<=、>、>=)用来比较两个字符串,而下标运算符[]用来访问一个字符。例如:

s1 ="Washi ngton"
s2 = "Cali fornia"
print("The first character in s1 is",s1[0] )
print("s1+s2is",s1+s2)
print("s1 < s2?",s1 < s2 )

        这些运算符实际。上都是在str类中定义的方法。为运算符定义方法被称作运算符重载。运算符重载允许程序员使用内嵌的运算符为用户定义方法。下表罗列出运算符和方法之间的映射关系。当你命名这些方法时,名字前后要加两个下划线以便于Python辨识它们的关联性。例如:为了将运算符+作为方法来使用,你应当定义一个名为__ add__ 的方法。 注意:这些方法并不是私有的,因为它们除了两个起始下划线还有两个结尾下划线。回顾一下,类中的初始化程序被命名为__ init__ ,这是一个初始化对象的特殊方法。

例如,你可以使用如下方法改写之前的代码:

s1 = "Washington"
s2 = "California"
print("The first character in sl is", s1.__ getitem__(0) )
print("s1 + s2 is", s1.__add__ (s2))
print("s1 < s2?", s1.__lt_ __ (s2))

        s1.__ getitem__ (0) 与s1[0]相同,sl.__ add__ (s2) 与s1+s2相同,而s1.__ lt__ (s2) 与s1<s2相同。现在,你可以看出重载运算符的优势。重载运算符可以极大地简化程序,让程序更易读、易维护。

        Python支持in运算符,它可以用来判断一个字符是否在另一个字符串中或者一个元素是否是一个容器中的成员。对应的方法被命名为__ contains__(self,e)。 你可以使用方法__contain__或使用 in运算符来判断一个字符是否在一个字符串内,代码如下所示。

1 s1 = "Washi ngton"
2 print("Is W in s1?", 'W' in s1 )
3 print("Is W in s1?", s1.__contains__('W') )

W in s1和s1.__ contains__('w')一样。

如果一个类定义了__ len__ (self) 方法,那么Python允许你使用方便的语法将调用方法作为函数调用。例如:__ len__ 方法被定义在 str类中,该方法返回字符串的字符个数。你既可以使用__ len__ 方 法也可以使用len函数来获取字符串中的字符个数,代码如下所述:

1 s1 = "Washington"
2 print("The 1ength of s1 is", 1en(s1))
3 print("The 1ength of s1 is", s1.__1en__())

len(s1)和s1.__ len__ () 是相同的。

        许多特殊的运算符都被定义为Python的内置类型,例如: int 和float。假设i是3而j是4。i.__add__ (j) 和i+j是相同的,而i.__sub__(j) 和i-j是相同的。

注意:你可以传递一个对象 去调用print(x)。 这等价于调用print(x.__ str__()) 或 print(str(x))。

        注意:比较运算符(==、!=、<、<=、>和>=)也可以通过使用方法__ cmp__ (self,other)来实现。如果self<other,那么该方法返回负整数。如果self==other,那么该方法返回0。如果self>other, 那么该方法返回正整数。对于两个对象a和b,如果__ It___ 可用的话,那么a<b就调用a.__ It__(b)。 如果不行的话就调用__cmp__ 方法 来决定顺序。

四、总结

  • 字符串对象是不可变的,不可以改变它的内容。
  • 可以使用Python函数len、min和max来返回字符串的长度、最大元素和最小元素。
  • 可以使用下标运算符[]来指向字符串中的一个单独的字符。
  • 可以使用连接运算符+来连接两个字符串,使用复制运算符*来复制一个字符串多次,使用截取运算符[: ]来获取子串,而使用运算符in和not in来判断-一个字符是否在一个字符串中。
  • 使用比较运算符(==、!=、 <、<=、>和>=)比较两个字符串。
  • 使用for循环迭代字符串中的所有字符。
  • 可以在字符串对象上使用像endswith、startswitch、 isalpha、 islower、 isupper、lower、 upper、 find 、count、replace和strip这样的函数。
  • 可以为重载操作定义特殊方法。

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

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

相关文章

快速入门vue3新特性和新的状态管理库pinia

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 Vue3.3新特性 defineOptions defineModel pinia 介绍 与 Vuex 3.x/4.x 的比较 安装 核心概念 定义…

【腾讯云Cloud Studio实战训练营】使用Cloud Studio社区版快速构建React完成点餐H5页面还原

陈老老老板&#x1f9b8; &#x1f468;‍&#x1f4bb;本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09; &#x1f468;‍&#x1f4bb;本文简述&#xff1a;生活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f468;‍&#x1f4bb;上一篇…

成集云 | 用友U8采购请购单同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 用友U8是中国用友集团开发和推出的一款企业级管理软件产品。具有丰富的功能模块&#xff0c;包括财务管理、采购管理、销售管理、库存管理、生产管理、人力资源管理、客户关系管理等&#xff0c;可根据企业的需求选择相应的模块进行集…

数据结构之队列详解(包含例题)

一、队列的概念 队列是一种特殊的线性表&#xff0c;特殊之处在于它只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;进行插入操作&#xff0c;和栈一样&#xff0c;队列是一种操作受限制的线性表。进行插入操…

【Windows 常用工具系列 5 -- Selenium IDE的使用方法 】

文章目录 Selenium 介绍Selenium IDE 介绍 Selenium IDE安装Chrome 浏览器安装Selenium IDE使用 Selenium 介绍 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 Selenium家庭成员有三个&#xff0c;分别是S…

腾讯云国际站代充-阿里云ECS怎么一键迁移到腾讯云cvm?

今天主要来介绍一下如何通过阿里云国际ECS控制台一键迁移至腾讯云国际CVM。腾讯云国际站云服务器CVM提供全面广泛的服务内容。无-需-绑-定PayPal&#xff0c;代-充-值腾讯云国际站、阿里云国际站、AWS亚马逊云、GCP谷歌云&#xff0c;官方授权经销商&#xff01;靠谱&#xff0…

视频汇聚集中存储EasyCVR平台调用iframe地址视频无法播放,该如何解决?

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…

【SpringBoot】中的ApplicationRunner接口 和 CommandLineRunner接口

1. ApplicationRunner接口 用法&#xff1a; 类型&#xff1a; 接口 方法&#xff1a; 只定义了一个run方法 使用场景&#xff1a; springBoot项目启动时&#xff0c;若想在启动之后直接执行某一段代码&#xff0c;就可以用 ApplicationRunner这个接口&#xff0c;并实现接口…

xollam勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

引言&#xff1a; 数字时代的繁荣与便捷&#xff0c;也孕育着各种网络安全威胁。其中&#xff0c;.xollam勒索病毒以其毒害性和隐蔽性引发了广泛关注。本文91数据恢复将为您深入解析.xollam勒索病毒的威胁&#xff0c;探讨解密方法&#xff0c;同时分享预防.xollam勒索病毒的关…

【Tomcat】(Tomcat 下载Tomcat 启动Tomcat 简单部署 基于Tomcat进行网站后端开发)

文章目录 Tomcat下载Tomcat启动Tomcat简单部署 基于Tomcat进行网站后端开发 Tomcat Tomcat 是一个 HTTP 服务器.HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式. HTTP 服务器我们可以通过 Java Socket 来实现. 而 Tomcat 就是基于 Java 实现的一个开源免费,也是…

Synopsys EDA数字设计与仿真

搭建EDA环境 参考如下博文安装Synopsys EDA开发工具 https://blog.csdn.net/tugouxp/article/details/132255002?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132255002%22%2C%22source%22%3A%22tugouxp%22%7D Synopsys ED…

【Git】本地搭建Gitee、Github环境

本地 &#xff08;Local&#xff09; 1、使用命令生成公钥&#xff08;pub文件&#xff09; 1. $ ssh-keygen -t rsa -C "xxxxxxxemail.com" -f "github_id_rsa" 2. $ ssh-keygen -t rsa -C "xxxxxxxemail.com" -f "gitee_id_rsa" …

配置pyqt5开发环境

安装库 pip install pyqt5 -i https://mirrors.aliuyun.com/pypi/simple pip install pyqt5-tools -i https://mirrors.aliuyun.com/pypi/simple pip install PyQt5designer -i https://mirrors.aliuyun.com/pypi/simple配置External Tools Name:QtDesigner Program:C:\Anaco…

使用路由器更改设备IP_跨网段连接PLC

在一些设备IP已经固定,但是需要采集此设备的数据,需要用到跨网段采集 1、将路由器WAN&#xff08;外网拨号口&#xff09;设置为静态IP 2、设置DMZ主机&#xff0c;把DMZ主机地址设置成跨网段的PLC地址 DMZ主机 基本信息. DMZ (Demilitarized Zone)即俗称的非军事区&#xff0…

牛客网华为OD前端岗位,面试题库练习记录01

题目一 质数因子 功能:输入一个正整数&#xff0c;按照从小到大的顺序输出它的所有质因子&#xff08;重复的也要列举&#xff09;&#xff08;如180的质因子为2 2 3 3 5 &#xff09; JavaScript Node ACM模式 const rl require("readline").createInterface({ i…

IPv4分组

4.3.1 IPv4分组 IP协议定义数据传送的基本单元——IP分组及其确切的数据格式 1. IPv4分组的格式 IPv4分组由首部和数据部分&#xff08;TCP、UDP段&#xff09;组成&#xff0c;其中首部分为固定部分&#xff08;20字节&#xff09;和可选字段&#xff08;长度可变&#xff0…

1AE4 的魔改混合放大电路

先上电路图&#xff1a; 最新的1AE4的电路&#xff0c;目标依旧是极致的音效。 因此&#xff0c;为了将1AE4的潜力榨干&#xff0c;采用了一些完全不同的思路&#xff1a; 1&#xff09;原有的屏极接地&#xff0c;因为是一个壳子&#xff0c;所以能起到很好的屏蔽作用&#…

651页23万字智慧教育大数据信息化顶层设计及建设方案WORD

导读&#xff1a;原文《651页23万字智慧教育大数据信息化顶层设计及建设方案WORD》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 目录 一、 方案背景 1.1 以教育…

微信开发之一键获取好友详情的技术实现

简要描述&#xff1a; 获取联系人信息 请求URL&#xff1a; http://域名地址/getContact 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说…

go 协程并发数控制

错误的写法&#xff1a; 这里的<-ch 是为了从channel 中读取 数据&#xff0c;为了不使channel通道被写满&#xff0c;阻塞 go 协程数的创建。但是请注意&#xff0c;go workForDraw(v, &wg) 是不阻塞后续的<-ch 执行的&#xff0c;所以就一直go workForDraw(v, &…