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

C/C++ 下标运算符subscript、后缀表达式、正负下标 提问:如果我们要获得a数组的第二个元素,请问一下那种方式可以达到要求。 int a[] = { 1,2,3,4,5,6 }; cout << a[1] << endl; cout << *(a+1) << endl; cout << 1[a] << endl; cout << (1)[a] << endl; 答案是都可以。 首先,ar[i]和*(ar+1)这两个表达式都是等价的,这里就不再多说了,而1[a] 与 阅读详情

学习目标:

  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这样的函数。
  • 可以为重载操作定义特殊方法。
浙大版《Python 程序设计》题目集 文章目录编程题第1章1 从键盘输入两个数,求它们的和并输出2 从键盘输入三个数到a,b,c中,按公式值输出3 输出“人生苦短,我学Python”第2章1 计算 11+12+13+...+m2 计算分段函数[1]3 阶梯电价4 特殊a串数列求和5 求奇数分之一序列前N项和6 求交错序列前N项和7 产生每位数字相同的n位数8 转换函数使用9 比较大小10 输出华氏-摄氏温度转换表 编程题 第1章 1 从键盘输入两个数,求它们的和并输出 a = eval(input()) b = eval(input()) p 阅读详情

相关推荐

python语言程序设计(梁勇)

第一章 计算机、程序和Python概述 绘制文本字符串:turtle 第二章 基本程序设计 第三章 数学函数、字符串和对象 第四章 选择 第五章 循环 第六章 函数 第七章 对象和类 第八章 更多字符串和方法 第九章 使用 Tkinter 进行 GUI程序设计 第十章 列表 第十一章 多维列表 第十二章 继承和多态 第十三章 文件和异常处理 第十四章 元组、集合和字典 第十五章 递归 ...

li123chen的博客 1万+

如何从 Python 中的字符串列表中删除特殊字符?

在进行字符串处理和文本分析时,有时我们需要从字符串列表中删除特殊字符。特殊字符可能是空格、标点符号、换行符等,在某些情况下它们可能干扰我们的文本处理或分析任务。Python 提供了多种方法来删除字符串列表中的特殊字符。本文将详细介绍在 Python 中删除字符串列表中特殊字符的几种常用方法,并提供示例代码帮助你理解和应用这些方法。

网络技术联盟站 6508

浙大Python程序设计(MOOC)习题答案

浙大Python程序设计(MOOC)习题答案,PTA习题答案

Lillian_f的博客 4万+

Python 去除特殊字符

在 Python 中,可以使用正则表达式来去除特殊字符。 要使用正则表达式,首先需要导入 re 模块: import re 然后,可以使用 re.sub() 函数来替换匹配的特殊字符。例如,以下代码可以将字符串中的所有数字字符替换为空字符串: import re text = "Hello, World! 123" result = re.sub(r'\d', '', text) print(...

weixin_35750483的博客 3799

PTA-浙大版 《Python程序设计》 第三章编程题目及答案

博主第一次写优快云的博客,所以排版上可能有些不尽人意,代码部分均为自己的思路,可能复杂或者考虑欠妥,欢迎大家一起讨论~ 第一题:大于身高的平均值 这里用了np数组求得平均数,当然for循环累加也是可以的 import numpy as np data = input().split() data = list(map(int,data)) avg = np.mean(data) for i in data: if i > avg: print(i,end = '

Legendwqs的博客 1万+

python程序设计第二版答案,《python程序设计》题库

大家好,小编来为大家解答以下问题,python程序设计题库及答案第二章答案大全,python程序设计题库及答案第二章答案解析,现在让我们一起来看看吧!

w12130826的博客 1837

解密ftfy模块:Python中处理特殊字符和编码问题的利器!

本文介绍了ftfy模块的基本用法,并通过多种场景下的Python代码案例展示了其实际应用。使用ftfy模块可以帮助我们更轻松地处理文本数据中的编码问题和特殊字符,提高数据处理的效率和准确性。

2401_84204207的博客 1148

python程序设计题库及答案,python程序设计题库网站

首先我来说一下我总结的这些习题,因为我看网上总结的很多,但是很乱,所以我就想着给他总结一份完整的,这些题都是我在网上找的,如果有侵权,我会立马删除,也乐意大家转载使用,不过得表明来出吧!!!

P42695665的博客 3218

c程序设计 字符串处理函数

调用函数----函数原型(函数说明书) 函数原型 函数返回值 函数名(形参1类型 形参1,形参2类型 形参2…); 说明 函数返回值:函数完成相应功能后,带回值的类型,void为不带回任何值 函数名:合法的标识符 1)调用函数 语法:函数名(实参1,实参2…) 说明:如果函数有返回值,并且要使用时,可以定义一个和返回值类型一致的变量去接收返回值 sqrt:double(函数返回值)sqrt(d...

qq_45725890的博客 511

7、Python程序设计:python的字符串

7、Python程序设计:python的字符串

天涯雨的博客 1095

python程序设计的课后答案,python程序设计教程答案

序列(sequence) 是 Python 中一种最基本的数据结构,序列中每个元素都有一个跟位置相关的序号,称为索引。通过索引可以访问序列元素,从而进行各种处理python如何画出多个笑脸。序列的特征、运算、操作和方法字符串的表示、创建和方法列表的表示、创建、操作和方法元组的表示、创建和作用range 对象的特征和 range() 函数的基本作用目录前言正文题目一题目二题目三题目四题目五题目六总结。

chatgpt002的博客 1220

浙大版PTA《Python 程序设计》题目集 参考答案

本答案配套详解教程专栏,欢迎订阅。

少侠PSY的博客 5万+

Python语言程序设计

本文摘要:本文介绍了Python程序设计的核心概念与方法。第1章阐述了程序设计IPO模式(输入、处理、输出);第2章详述了Python基本语法,包括格式框架、语法元素和输入输出;第3章讲解了基本数据类型,涵盖数字类型、字符串操作及类型转换;第4章解析程序控制结构,包括分支、循环和异常处理;第5章简要提及组合数据类型。重点内容包括:字符串处理函数、保留字、数据类型转换、控制结构语法以及异常处理机制。全文系统性地介绍了Python编程的基础知识体系。

weixin_44218363的博客 799

Python 程序设计习题(2) —— 字符串的处理

1. Python 习题部分 要想学习一门语言,便少不了练习。 故附上部分 Python 习题,供大家学习参考。 如有错误之处,还望指正! 1.输入字符串"http://sports.sina.com.cn/",输出以下结果: 1)字符串中字母t出现的次数。 2)字符中"com"子串出现的位置。 3)将字符串中所有的"."替换为"-"。 4)提取"sports"和"sina"两个子串(分别使用正向和反向截取方式)。 5)将字符串中的字母全变为...

Krelinn_Bios的博客 2万+

Python处理mysql特殊字符的问题

今天小编就为大家分享一篇Python处理mysql特殊字符的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

自旋玻璃(spin glass)、自旋冰(spin ice)和量子自旋液体(quantum spin liquid)(之二)

具有相同电荷的电子相互排斥。结果,为了在极其拥挤的环境中相互超越,他们不得不改变自己的行为。剑桥大学和英国伯明翰大学于 2009 年 7 月发表的研究表明,电子可以通过量子隧穿从金属表面跳到相近位置的量子线上,这样做后,将分离成两个准粒子,命名为的自旋子和全子。Van den Brink、Khomskii 和 Sawatzky 在 1997-1998 年对轨道子进行了理论上的预测。在 2011 年 9 月发给出版商的论文中报告了它作为一个单独的准粒子的实验观察结果。

qq_32515081的博客 1万+

【题解】浙大版《Python 程序设计》题目集

浙大版《Python 程序设计》题目集 题解 题目传送门: 浙大版《Python 程序设计》题目集 第1章-1 从键盘输入两个数,求它们的和并输出 从键盘输入两个数,求它们的和并输出 AC代码 a = int(input()) b = int(input()) print(a + b) 第1章-2 从键盘输入三个数到a,b,c中,按公式值输出 从键盘输入三个数到a,b,c中,按公式值输出 AC代码 a,b,c=map(int,input().split()) print(b * b - 4 *.

鸪鹑菌的个人博客 1986

别再只调电位器了!用单片机PWM控制LM317输出电压,精度和玩法都多了

本文探讨了如何利用单片机PWM控制LM317输出电压,替代传统的电位器调节方案。通过PWM信号的有源滤波和运放处理,实现了更高精度(±5mV)、更好温度稳定性(0.01%/°C)的数控稳压电源设计,支持远程控制和可编程曲线输出,为经典电路注入数字化智能。

weixin_29164497的博客 359

【Python程序设计】实验07(字符串)

1、【描述】 脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成。而构成DNA的碱基共有4种,分别为腺瞟呤(A)、鸟嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。在两条互补碱基链的对应位置上,腺瞟呤总是和胸腺嘧啶配对,鸟嘌呤总是和胞嘧啶配对。你的任务就是根据一条单链上的碱基序列,给出对应的互补链上的碱基序列。 【输入】 第一行是一个正整数n,表明共有n条要求解的碱基链。 以下共有n行,每行用一个字符串表示一条碱基链。这个字符串只含有大写字母A、T、G、C,分别表示腺瞟呤、胸腺嘧啶、鸟嘌呤和胞嘧啶。每

weixin_45767200的博客 3143

告别理论劝退:用动画和Tanner图轻松理解QC-LDPC的译码原理(BP算法详解)

本文通过动画和Tanner图直观解析QC-LDPC码的BP译码原理,帮助读者轻松理解802.11ac协议中的编译码过程。文章详细展示了QC-LDPC的结构之美、BP算法的动态信息流动以及LLR的视觉化解读,并对比了硬判决算法的性能差异,为开发者和研究者提供了实用的可视化工具开发建议。

weixin_30411239的博客 492

AI智能体协作:构建更精准的公司破产预测模型

公司破产预测对于金融机构、投资者和监管部门等具有至关重要的意义。准确的破产预测可以帮助金融机构提前做好风险防范,避免贷款损失;投资者可以根据预测结果调整投资组合,降低投资风险;监管部门可以及时发现潜在的金融风险,采取相应的监管措施。然而,传统的公司破产预测模型往往存在精度不高的问题,无法满足实际需求。本研究的目的是利用AI智能体协作的方式,构建一个更精准的公司破产预测模型。通过将多个AI智能体的优势进行整合,充分挖掘公司财务数据、市场数据等多源数据中的信息,提高预测的准确性和可靠性。

2501_92132293的博客 1081
上一篇: Python程序设计——对象和类
下一篇: Python程序设计——列表
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值