定义字符串

字符串:单引号(‘)和双引号(”)的作用相同,转义符是(\),以三引号(如:”‘或者”““)括起来的字符串中可以直接使用任意多个单引号(‘)和双引号(”)而无需转义符(\)。

自然字符串:在字符串前加R(或r)指示某些不需要如转义符那样的特别处理的字符串,如:print R”Hello\n World”,将直接输出”Hello\n World”而不会出现换行的情况。

Unicode字符串:在字符串前加U(或u)。

s1 = 's1'
s2 = "s2"
s3 = r'What\'s your name?'
s4 = ''' I'm Liuzc '''
s5 = u"This is a Unicode string."

字符串的基本操作

与Java类似,在Python中,字符串可以通过”+“操作符进行合并,比较特有的是Python中还可以通过”*“操作符进行重复.

print 'abc'+'def'     # abcdef
print 'abc'*3         # abcabcabc
print len('abcdef')   # 6

使用”*“操作符时,就像在字符串后再增加一定数量的自身.但是Python不允许将一个数字和一个字符串相加:‘abc’+123会抛出一个错误,而不会得到’abc123’,正确的做法应该是’abc’+str(123). 内置的str函数将数字转换为字符串表达形式,而int函数则将字符串转换为数字. 内置的len函数返回一个字符串的长度.(这与获得列表,元组,集合或者字典的长度的函数是同一个)

索引和分片

在Python中,字符串是一个有序的字符的集合.这句话传递了两个信息, 1.字符串类似一个集合,2.它是有序的. 严格的说,Python的字符串被划分为不可变序列这一类别.这意味着一旦你创造了一个字符串,你就不能再改变它了.

我们说字符串是一个有序的字符集合,所以我们可以通过其索引位置获得它的元素.和Java语言一样,Python索引也是从0开始的,并比字符串的长度小1.但是与Java不同的是,在Python中,还支持负索引从序列中获取元素.负索引就是从字符串末尾处反向计算.

s = 'This is a string'
print s[3]   ###  下标从0开始,s[3]即 's'
print s[-1]  ###  -1表示最后一个字符 即 'g'

索引S[i]获取特定偏移的元素:

  • 第一个元素的索引为0,S[0]获取第一个元素
  • 负偏移索意味着从最后或右边反向进行计算,S[-2]获取了倒数第二个元素,就像S[len(S)-2]一样. 分片是用一对冒号”:“分隔的数字来索引字符串这样的序列对象,Python将返回一个新的对象,其中包含了以这对偏移所标识的连续的内容.左边的数字作为下边界(包含下边界在内),而右边的偏移作为上边界(不包含上边界在内).如果被省略,上、下边界的默认值对应分别为0和分片的对象的长度。

分片(S[i:j])提取对应的部分作为一个序列:

  • 上边界并不包含在类,包含下边界,如果用数学中的集合表示,则为S[i:j)
  • 分片的上边界默认为0,下边界默认为序列的长度.
  • S[1:3]获取从索引为1直到但不包括索引为3的元素
  • S[1:]获取从索引为1直到末尾之间的元素
  • S[:3]获取从开始直到但是不包括索引为3之间的元素
  • S[:-1]获取了从索引为0直到但是不包括最后一个元素之间的元素
  • S[:] 获取所以元素.有效地实现顶层S拷贝
S = 'abcdef'
print S[1:3]     #bc
print S[1:]      #bcdef
print S[:3]      #abc
print S[:-1]     #abcde
print S[:]       #abcdef

在Python2.3中,分片表达式增加了一个可选的第三个索引.用作步进.完整形式的分片现在变成了S[i:j:k],这表示:“索引S对象中的元素,从索引为i直到索引为j-1,每隔k个元素索引一次”,第三个限制k,默认为1.也可以使用负数作为步进.步进-1表示分片将会从右至左进行而不是通常的从左至右.因此,实际效果主是将序列反转.

S1 = '123456789'
print S1[1::2]   #2468
print S1[::-2]   #97531
print S1[5:1:-1] #6543

格式化字符串

Python 支持格式化字符串的输出.如今的Python中的字符串格式化可以以两种形式实现.

1.字符串格式化表达式

1)在%操作符的左侧放置一个需要进行格式化的字符串,这个字符串带有一个或多个嵌入的转换目标,都以%开头.(例如,%d,%s…)

2)在%操作符右侧放置一个(或多个,嵌入到元组中)对象,这些对象将会嵌入到左侧想让Python进行格式化字符串的一个(或多个)转换目标的位置上去.

'This is %d %s brid' % (1,'dead')   ## This is 1 dead brid
k = 'pwd'
v = 'admin'
'%s = %s' % (k,v)  ####  pwd = admin
print("%.2f%%" % 22.3)  ###  22.30%  如果在格式化字符串中要输出百分号,则需要使用 **%%**

转换说明符

转义说明符含义
d,i带符号的十进制整数
o不带符号的八进制
u不带符号的十进制
x不带符号的十六进制(小写)
X不带符号的十六进制(大写)
e科学计数法的浮点数(小写)
E科学计数法的浮点数(大写)
f,F十进制浮点数
g如果指数大于-4或者小于精度值则和e相同,否则和f相同
G如果指数大于-4或者小于精度值则和E相同,否则和F相同
C单字符(接受整数或者单字符字符串)
r字符串(使用repr转换任意Python对象)
s字符串(使用str转换任意Python对象

2.字符串格式化方法调用

s.format(*args,*kwargs)

该形式可认为是一种函数调用。

"{0},{2},{1}".format(one,2,3)
### 结果为"one,2,1",这个过程是使用{index}作为占位符,后面的args列表中相应下标的数据会替换之。

"{0},{2},{1},{str}".format(one,2,3,str="string")
###结果为 "one,2,1,string",由上面可以前3个依次被列表的索引所替换,而最后一个则被*kwargs字典所替换,这样就 不止局限于index了。

"{0:10},{1:> 10.5f},{str:10}".format(one,2,3.2,str="string")
###结果为 "stirng , 1.30000,string "
#在原有的基础上加上冒号和标准形式中定义的格式转换符即可,但是这里要注意了,其对齐不在用"+"和"-"
#  而是  < 右对齐
#      >  左对齐
#      ^ 两边对齐

字符串方法

除表达式运算符之外,Python字符串还提供了一系统的方法去实现更复杂的字符串处理.这部分内容可以查看Python的标准手册以获取最新的列表,或者在交互模式下在任何字符串上调用help.

在Python 3中字符串方法有增加或修改.具体可查看最新的Python文档.

注: 上方小结参数的资料有: 《Python学习手册 第四版》

赖勇浩(恋花蝶)的博客:Python 字符串方法详解