第三章 使用字符串
Posted liuxinkai94
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章 使用字符串相关的知识,希望对你有一定的参考价值。
第三章 使用字符串
前面已经学过了如何使用索引和切片来访问字符串中的字符。本章将介绍如何使用字符串来设置其他值的格式(比如便于打印),并大致了解使用字符串的方法可完成的任务,如拆分、合并和查找等
3.1 字符串基本操作
所有标准序列操作(索引、切片、乘法、成员检查资格、长度、最小值和最大值)都适用于字符串,但别忘了了字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的。
>>>website = ‘http://www.python.org‘
>>>website[-3:]=‘com‘
Traceback (most recent call last):
...............................
...............................
接下来就是报错,报错内容省略,可以自己去尝试一下。
3.2设置字符串的格式:精简版
如果你是新手,那么介绍以下内容就够大家使用了。
将值转换成字符串并设置其格式是一个重要的操作,需要考虑到众多不同的需求,因此随着时间的流逝,Python提供了许多字符串格式设置方法。以前,主要的解决方案是使用字符串格式运算符------百分号。这个运算符的行为类似于C语言的经典函数printf:在%左边指定一个字符串(格式字符串),并在右边指定要设置其格式的值。指定的设置其格式的值时,可使用单个值(如字符串或者数字),可使用元组(如果要设置多个值的格式),还可使用字典(将在下一张讨论),其中最常见的是元组。
>>>format="Hello,%s.%s enough for ya?
>>>values=(‘world‘,‘Hot‘)
>>>format % values
‘Hello,world.Hot enough for ya?‘
上述的格式字符串中的%称为转换说明符,其他说明符将导致其他字符串的转换。例如,%.3f将值的格式设置为包含3位小数的浮点数。
编写新代码的时候,我们应该使用字符串方法format,它融合并强化了早期方法的优点。使用这种方法时,每个替换字段用花括号括起来,其中可能包含名称,还可能包含有关如何对相应的值进行转换和格式设置的信息。
在最简单的情况下,替换字段没有名称或者将索引用作名称。
>>>"{},{} and {}",format("first","second","third")
‘first,second and third‘
>>>"{0},{1} and{2}".format("first","second","third")
’first,second and third‘
然而,索引无需像上面这样按排序排列
>>>"{3} {0} {2} {1} {3} {0}".format("be","not","or","to")
"to be ot not to be"
命名字段的工作原理与你预期的完全一样
>>>from math import pi
>>>“{name} is approximately {value:.2f}.".format(value=pi,name="Π“)
”Π is approximately 3.14“
当然,此时关键字的排序不是非常重要,format括号内的内容可以随便放。
最后,在python中,如果变量于替换字段同名,还可使用一种简写。在这种情况下,使用f字符串------在字符串前面加f
>>>from math import e
>>>f"Euler‘s constant is roughly {e}."
"Euler‘s constant is roughly 2.71818......."
在这里,创建最终的字符串时,将把替换字段e替换为变量e的值,这里与下面的表达式等价:
>>>"Euler‘s constant is roughly {e}.".format(e=e)
"Euler‘s constant is roughly 2.71828............"
3.4字符串方法
3.4.1 center
方法center通过在两边添加填充字符(默认为空格)让字符串居中。
>>>"The Midde by a Jimmy Eat World".center(39)
‘ The Middle by Jimmy Eat World ‘
>>>"The Middle by a Jimmy Eat World".center(39,‘*‘)
‘*****The Middle by a Jimmy Eat World*****‘
3.4.2 find
方法find在字符串中查找字串。如果找到,就返回字串的第一个字符的索引,否则返回-1。
>>>‘With a moo-moo here,and a moo-moo there‘.find(‘moo‘)
7
>>>title = "Monty Python‘s Fiying Circus"
>>>title.find(‘Monty‘)
0
>>>title.find(‘Zirquss‘)
-1
第二章部分的初识成员资格时,我们在垃圾邮件过滤器中检查主题是否包含’$$$‘。这种检查可使用find来执行,也可使用in来代替。
>>>subject=‘$$$ Get rich now!!! $$$‘
>>>subject.find(‘$$$‘)
0
注意:字符串方法find返回的并非布尔值。如果find像这样返回0,这意味着它在索引0处找到了指定的字串。
你同样可以指定搜索的起点和终点(它们都是可选的)。
>>> subject=‘$$$ Get rich now!!! $$$‘
>>>subject.find(‘$$$‘)
0
>>>subject.find(‘$$$‘,1)#只是指定了起点
20
>>>subject.find(‘!!!‘)
16
>>>subject.find(‘!!!‘,0,16) #同时指定了起点和终点
-1
请注意,起点和终点(第二参数和第三参数)指定的搜索范围包含起点,但不包含终点,这是Python惯用的做法。
3.4.3 join
join是一个非常重要的字符串方法,其作用于split相反,用于合并序列的元素。
>>>seq=[1,2,3,4,5]
>>>sep=‘+‘
>>>sep.join(seq)#尝试合并一个数字列表
Trackback (most recent call last):
..................................................
..................................................(此处报错)
>>>seq=[‘1‘,‘2‘,‘3‘,‘4‘,‘5‘]
>>>sep.join(seq)
‘1+2+3+4+5‘
>>>dirs= ‘ ‘,‘usr‘,‘bin‘,‘env‘
>>>‘‘.join(dirs)
‘ /usr/bin/env‘
>>>print(‘C:‘+‘\‘.join(dirs))
C: usrinenv
注意:第二个例子此处用到了转义
3.4.4 lower
方法lower返回字符串的小写版本
>>>‘Trondheim Hammer Dance‘.lower()
‘trondheim hammer dance‘
如果不想区分字符串的大小写(即忽略大小写差别),很有用的。例如,假设你要检查列表中是否包含指定的用户名。如果列表包含字符串’gumby‘,而指定的用户名为‘Gumby‘,你找不到它。
>>>if ‘Gumby‘ in[‘gumby‘,smith‘,‘jones‘]:print(‘Fount it!‘)
....
>>>
这样当然查找不到,但如果将其转化成小写。这样做代码类似于下面:
>>>name=‘Gumby‘
>>>names=[‘gumby‘,‘smith‘,‘jones‘]
>>>if name.lower() in names:print(‘Fount it!‘)
.....
Fount it!
>>>
3.4.5 replace
方法replace将指定子串都替换为另一个字符串,并返回置换后的结果。
>>>‘This is a test‘.replace(‘is‘,‘eez‘)
‘Theez eez a test‘
如果你使用过字处理程序的“查找并替换”功能,一定知道这个方法有用。
3.4.6 strip
方法strip将字符串开头和末尾留空白(但不包括中间的空白)删除,并返回删除后的结果。
>>>‘ abc def ‘.strip()
‘abc def‘
与lower一样,需要将输入与存储的值进行比较时,strip很有用。回到前面介绍lower时使用的用户名示例,并假定用户输入用户名的时候末尾加上了一个空格。
>>>names=[‘gumby‘,‘smith‘,‘joins‘]
>>>name = ‘gumby ‘
>>>if name in names:print(‘Found it !")
...
>>>if name.strip() in names:print(‘Found it!‘)
...
Found it!
>>>
你也可以在一个字符串参数中指定删除哪些字符。
>>>‘*** SPAM * for * everyone!!! ***’。lower(‘ *!’)
‘SPAM*for*everyone‘
这个方法只删除开头或者末尾的指定字符,因此中间的星号未被删除。
3.4.8 translate
方法translate与replace一样替换字符串的特定部分,但不同的地方在于它只能进行单字符替换。这个方法的优势在于能够同时替换多个字符串。因此比replace的效率高。
注意,使用translate必须提前创建一个转换表,可对字符串类型str调用函数maketrans,这个方法接受两个参数:两个长度相同的字符串,它们指定要将第一个字符串中的每个字符串都替换成第二个字符串中相应的字符
举例:
>>>table=str.maketrans(‘cs‘,‘ke‘)
如果愿意,可查看转换表的内容,你可看到的只是Unicode码点之间的映射。
>>>table
{115:122,99:107}
创建转换表后,就可将其用做方法translate的参数。
>>>‘this is an incredible test‘.translate(table)
thiz iz an inkredible tezt‘
调用方法maketrans时,还可提供可选的第三个参数,指定要将那些字母删除。例如,要将模仿语速极快的德国口音,可将所有的空格删除。
>>>table=str.maketrans(‘cs‘,‘ke‘,‘ ‘)
>>>‘this is an incredible test‘.translate(table)
‘thizizankredibletezt‘
3.4.9 判断字符串是否满足特定的条件
很多字符串方法以is打头,如isspace、isdigit和issupper,它判断字符串是否具有特定的性质(如包含的字符全为空白、数字或者大写)。如果字符串具备特定的性质,这些方法就是True,否则返回False。
以上是关于第三章 使用字符串的主要内容,如果未能解决你的问题,请参考以下文章