字符串
1. 基本概念
字符串是一个不可变序列,由字符元素组成,可以通过下标访问其中的元素等,进行格式化等等。
2. 字符串常量
字符串的表示方法有很多,如:
单引号 ’hello’
双引号 ”world”
三引号 ’’’this isa long string’’’
转义字符 ”begin:\n”
原始字符串 r’c:\code\python’
Unicode字符串 u’a big string’
下面一一进行解释。
1)单引号和双引号一样
Python的字符串中,单引号和双引号是一样的。同时使用两种引号可以在字符串不使用转义字符串包含其余字符。
>>>"what's your name?"
"what'syour name?"
2)三引号可以是三个单引号,也可以是三个双引号。它的特别之处是,可以跨行写字符串,而且字符串可以包含单引号和双引号,而不需要进行转义。
>>>'''this's a long string\n
and can contain a lot of message
a test'''
"this'sa long string\n\n\t and can contain alot of message\n\ta test"
3)转义字符通过反斜线\在字符串中添加特殊的字符,如单引号’、换行符等。常见的转义字符有:
\:在语句的末尾添加\代表语句未完,接下行
\n: 换行符
\t: 制表符
\\: 字符\
\’: 字符’
\”: 字符”
\r:返回
\xhh:十六进制值
\ooo:八进制值
\u :unicode16位的十六进制值
\U:unicode32位的十六进制值
4)原始字符串以r开头,可以在原始字符串中放任何字符,而不会进行转义。例如要表示一个文件的路径,可以使用原始字符串r'c:\test\python'
5)unicode字符串,以u开头,unicode字符集是一个很大的字符集可以表示更丰富的字符。可以处理多个字节。
>>>u'ab\u0020cd'
u'abcd'
3. str()和repr()
python中有内建函数str()、repr()以及反引号运算符符` `用于获取对象的字符串形式。str()返回对象的较为合理的字符串,可读性好。反引号和repr()则以python合法的形式去创建一个字符串,进行返回。一般来说通过eval()函数可以重新获得该对象。
#结果相同
>>> str(1)
'1'
>>> repr(1)
'1'
#结果不同
>>> str(1000L)
'1000'
>>> repr(1000L)
'1000L'
>>> str('hello world')
'hello world'
>>> repr('hello world')
"'hello world'"
>>> print str('hello world')
hello world
>>> print repr('hello world')
'hello world'
#eval()
>>> eval(repr(1000L))
1000L
>>> eval(str(1000L))
1000
>>>
4. 字符串基本操作
字符串的基本操作主要有:字符串连接,索引、分片、乘法、成员存在性、内建函数
4.1字符串连接+
Python对+进行重载,字符串相加的时候表示将字符串进行连接。此外,连个字符串常量放到一起可以自动连接:
>>> a = "hello "
>>> b = "world!"
>>> a+b
'hello world!'
>>> 'Oneworld,'"One"'Dream!'
'One world,OneDream!'
4.2 索引
Python中的序列都具有索引及其操作。Python中索引有正有负,第一个元素的索引为0,其后元素的索引依次递增,为正索引。最后一个元素所以为-1,倒数第二个所以为-2,依次向前递减。因此可以理解为,序列中,除第一个元素索引只有一个0,其余元素均有正负两个索引。
可以通过索引获取序列的值。
>>> 'this is a test'[6]
's'
4.3 分片
格式:字符串[起始索引:结束索引:步长],返回一个字符串
通过索引我们可以获取序列的一个元素,而分片可以获取序列的多个元素。如
>>> c = "That's veryintresting!"
>>> c[1:3]
'ha'
返回字符串索引从1到3之间(不包括3)的字符串。
说明:
1.分片获得从起始索引到结束索引之间的元素,不包括结束索引
2.默认步长为1,可以显示指定。步长可以为正,也可以为负。正的步长表示从前向后开始复制,负的步长表示从后向前复制。要注意的是,索引的起始和结束值与步长要一致。
3.索引可以缺省,缺省时表示从字符串开头(步长为正),或者字符串末尾(步长为负)进行复制。起始和结束索引都缺省时表示复制整个字符串
>>> a = 'hello, world'
#正负索引
>>> a[1:3]
'el'
>>> a[-4:-1]
'orl'
#指定布长
>>> a[1:8:2]
'el,w'
>>> a[-1:-7:-1]
'dlrow '
#缺省索引
>>> a[-4:]
'orld'
>>> a[:3]
'hel'
>>> a[:]
'hello, world'
4.4乘法*
>>> 'hello '*2
'hello hello '
>>> 20*'*'
'********************'
>>>
4.5成员存在性in
a in b:若字符串b中包含字符串a,则返回True,否则返回False。其中a可以是单个字符,也可以是多个字符。
>>> 'h' in 'so high'
True
>>> 'good' in 'such a goodday'
True
>>> 'I' in 'there is no i inthis statement'
False
4.6内建函数
Python中有很多内建函数,这里介绍len()、max()、min(),功能分别是:获取字符串元素的个数,返回字符串中最大字符,返回字符串中最小字符。
>>> c = 'there are threebuilt-in functions in python'
>>> len(c)
44
>>> max(c)
'y'
>>> min(c)
' '
5. 字符串格式化
如:
>>>'hello,%s,nice to meeting you.' % 'Python'
'hello,Python,nice to meeting you.'
字符串格式化分为两部分,%左边是格式化字符串,右边是被格式化的值。值可以是字符串、数字、元组以及字典等。
#元组
>>> form = 'hello,%s.%s enoughfor yo'
>>> values = ('world','good')
>>> form % values
'hello,world.good enough for yo'
#数字
>>> 'your number is :%d' % 23
'your number is :23'
其中格式化字符串由%、转换标志、宽度、精度、转换类型组成。
如:
>>> '%-10.2f' % -3.1415926
'-3.14 '
转换标志:+表示显示正负号,-为左对齐,0表示位数不够用0补充。默认在正数之前保留空格。
宽度为转换后最小的字符宽度
精度为若是数字表示保留的小数点位数,若是字符串表示字符串的最大字符数。若是*,可从元组读取宽度。
转换类型主要有s(字符串)、d(整数)、f(实数)、c(单个字符)、o(八进制)、x(十六进制)等等。
#转换类型
>>> 'Price of eggs :$%d' % 42
'Price of eggs :$42'
>>> 'Price of eggs :$%x' % 42
'Price of eggs :$2a'
>>> 'Price of eggs :$%s' % 42
'Price of eggs :$42'
#宽度和精度
>>> from math import pi
>>> '%10f' % pi
' 3.141593'
>>> '%10.2f' %pi
' 3.14'
#符号、补0
>>> '%010.2f' %pi
'0000003.14'
>>> '%-10.2f' %pi
'3.14 '
6. 字符串方法
除了运算符,字符串还有很多方法可以实现更多的功能,这里介绍常见的几个。
1.字符串的分割和连接:
join
功能:将字符串序列中的每个字符通过指定的字符进行连接,返回连接后的字符串。是split的逆方法。
用法:‘连接字符’.join(字符串序列)
例:
>>> lines = 'hello'
>>> '*'.join(lines)
'h*e*l*l*o'
split
功能:将字符串按指定的字符进行分割,返回分割后的列表。若没有指定分隔符,默认把所有空格包括空格、制表、换行等作为分隔符。
用法:‘字符串’.split(‘分隔符’)
例:
>>> 'h*e*l*l*o'.split('*')
['h', 'e', 'l', 'l', 'o']
>>> 'this\nis a\tstatement'.split()
['this', 'is', 'a', 'statement']
2.字符串的转换
lower
功能:将字符串中的大写字母转换成小写字母返回。
用法:‘原字符串’.lower()
例:
>>> org = '****Hello,World!***'
>>> org.lower()
'****hello, world!***'
与该方法对应的是upper(),将字符串中的小写字母转换成大写字母返回
strip
功能:将字符串两端的指定字符或者空格去除。默认去除空格。注意只是两端的,不包括中间部分。而且可以去除不只一种字符。
例:
>>> ' ****One World,One Dream**** '.strip()
'****One World,One Dream****'
#去除空格和*
>>> ' ****One World,One Dream**** '.strip('* ')
'One World,One Dream'
3.字符串的查找和替换
find
功能:用于查找子字符串在原字符串中的位置,返回子串所在位置的最左端索引。若没有找到返回-1.
用法:’长字符串’.find(‘子串’)
>>> subject = '$$$I am agirl.##who are you?'
>>> 'girl' in subject
True
>>> subject.find('girl')
10
与in相似,但返回值不同。
find()函数还可以接收起始点和结束点参数,进行查找。
>>> subject.find('girl',15,20)
-1
>>> subject.find('girl',12)
-1
replace
功能:将字符串中的所有匹配的字符替换成新字符后返回
用法:strs.replace(str_old,str_new)
>>> strs = 'this is sogood,but that is very bad!'
>>> strs.replace('is','was')
'thwas was so good,but that was verybad!'
但是,replace一次只能进行对一个字符串进行替换。这时我们引如translate方法,它只能替换单个的字符,但可以同时进行多个替换,将多字符同时替换成另外多个其他字符。
translate
功能:将字符串中的单个字符替换成另外的字符。
用法:‘原字符串’.translate(table)
这里看到,translate方法接收的参数是一个转换表,它是字符替换关系,通过string模块的maketrans函数创建。
>>> from string importmaketrans
>>> table = maketrans('cs','kz')
>>> 'this is an incredibletest'.translate(table)
'thiz iz an inkredible tezt'
这里可以看到,元字符串中的c被替换为k,s被替换为z。这就是对应关系。此外,translate可以接收第二个参数,删除字符串中指定的字符。
>>> 'this is an incredibletest'.translate(table,' ')
'thizizaninkredibletezt'
字符串还有很多很多的方法,可以查阅相关资料进行学习