字符串的截取
字符串的截取是实际应用中经常使用的技术,被截取的部分称为“子串”。Java中使用函数substr()获取子串,C#使用函数substring()获取子串。而Python由于内置了序列,可以通过前面介绍的索引、切片获取子串,也可以使用函数split()来获取。字符串也属于序列。
下面这段代码使用序列的索引获取子串:
# 使用索引截取子串
print('----------# 使用索引截取子串---------')
word = 'world'
print(word[4])
【代码说明】第4行代码,访问字符串第5个字符的值。输出结果为“d”。
【运行结果】
通过切片可以实现对字符串有规律的截取。切片的语法格式如下所示。
string[start : end : step]
【代码说明】其中string表示需要取子串的源字符串变量。[start:end:step]表示从string的第start个索引位置开始到第end个索引之间截取子串,截取的步长是step。即每次截取字符string[start+step],直到第end个索引。索引从0开始计数。
下面这段代码演示了使用切片截取子串的功能:
# 特殊切片截取子串
print('---------# 特殊切片截取子串----------')
str1 = 'hello world'
print(str1[0:3])
print(str1[::2])
print(str1[1::2])
str2 = 'ABCDEFG'
print(str2[:3])
print(str2[3:])
print(str2[::2])
print('-----------------------------------')
【代码说明】
第10行代码,截取字符串中第1个字符到第3个字符之间的部分。
第11行代码,[::2]切片省略了开始和结束字符。从字符串的第1个字符开始,以2为步长逐个截取字符。
第12行代码,切片中的数字1表示从字符串的第2个字符开始取字符,数字2表示以2为步长逐个截取字符。
【运行结果】
如果要同时截取多个子串,可以使用函数split()实现。函数split()的声明如下所示。
split([char] [,num])
【代码说明】
参数char表示用于分割的字符,默认的分割字符是空格。
参数num表示分割的次数。如果num等于2,将把源字符串分割为3个子串。默认情况下,将根据字符char在字符串中出现的个数来分割子串。
函数的返回值是由子串组成的列表。
代码如下:
# 使用split()获取子串
print('-----------# 使用split()获取子串-----')
sentence = "Tom said: a,b,c,d."
print('使用空格获取子串:', sentence.split())
print('使用逗号获取子串:', sentence.split(','))
print('使用逗号获取3个子串:', sentence.split(',', 2))
sentence1 = 'Uzi tell us : he is king and said : A, B, C, D.'
print('使用空格获取子串:', sentence1.split())
print('使用逗号获取子串:', sentence1.split(','))
print('使用空格获取4个子串:', sentence1.split(' ',3))
print('-----------------------------------')
【代码说明】
第22行代码根据空格来获取子串。字符串sentence中有5个空格,将返回由6个子串组成的列表。
第23行代码根据逗号来获取子串。字符串sentence中有3个空格,将返回由4个子串组成的列表。
第24行代码根据逗号来分割字符串,并把字符串sentence分割为3个子串。
【运行结果】
字符串连接后,Python将分配新的空间给连接后的字符串,源字符串保持不变。

# 字符串连接后,Python将分配新的空间给连接后的字符串,源字符串保持不变。
print('字符串连接后,Python将分配新的空间给连接后的字符串,源字符串保持不变。')
str3 = "a"
print(id(str3))
print(id(str3 + "b"))
print('-------------------------------------')

【代码说明】
第2行代码输出str1的内部标识。输出结果为“4337916312”。
第3行代码,进行字符串连接,新的字符串将获得新的标识。输出结果为“4337800168”。
【运行结果】
ALL:
运行结果ALL:
-------------------end--------------------