Python的字符串用单引号或者双引号括起来表示。
字符串由若干个有序字符组成,但是python中的字符串是不能改变的,也就是说我们不能通过索引去改变某个字符的值。比如:str[1]= ‘x’这样的操作是不被允许的。
所谓转义字符,就是在其前面增加右斜杠\后,它并不代表其原本的字符含义,而是转义为另外的含义。比如‘\n’转义后表示一个换行符。
Python中用到的转义字符如下表所示:
转义字符 |
描述 |
\(在行尾时) |
续行符 |
\\ |
反斜杠符号 |
\' |
单引号 |
\" |
双引号 |
\a |
响铃 |
\b |
退格(Backspace) |
\e |
转义 |
\000 |
空 |
\n |
换行 |
\v |
纵向制表符 |
\t |
横向制表符 |
\r |
回车 |
\f |
换页 |
\oyy |
八进制数,yy代表的字符,例如:\o12代表换行 |
\xyy |
十六进制数,yy代表的字符,例如:\x0a代表换行 |
\other |
其它的字符以普通格式输出 |
# 转义字符
str1 = 'hello,\nworld!'
# 尾部的\是续行符,表示下一行也算作本行的内容。续行符后面不能再有任何字符,包括空格和注释
str2 ='hello,\"world!\"' \
'I am Tiger.'
print(str1)
print(str2)
输出为:
hello,
world!
hello,"world!"I am Tiger.
对于续行符要注意,它后面不能再有任何字符,包括空格和注释,否则会报错。
字符串截取就是从字符串中获取部分我们想到的字符,这是用得非常多的一个操作。
Python提供了非常灵活简单的字符串截取方式。
字符串截取语法如下:
变量[头下标:尾下标]
这里的下标,就是指的某个字符在字符串中对应的索引值。支持双向索引。我们还是以“hello,world!”这个字符串为例,其索引如下图所示:
正向索引,从0开始,往后递增;反向索引,从-1开始,往前递减。我们只需要明确要截取的子串对应的开始索引和结束索引,即可将其截取出来。
这里需要注意一点,python的截取语法,是“前闭后开”的。其截取的子串包含“头下标”对应的字符,但是却不包含“尾下标”对应的字符。这点需要特别注意,容易出错。
比如,我们要截取“hello”这个子串。[0:5]、[0:-7]、[-12:5]、[-12:-7],这几种方式可以达到相同的效果。
下面列出了一些使用的例子,大家可以参考:
# 字符串截取
str3 = 'hello, world!'
sub_str1 = str3[0:5] # 截取hello
sub_str2 = str3[-6:-1] # 截取world
print(sub_str1)
print(sub_str2)
print(str3[5]) # 输出第6个字符
print(str3[:5]) # 输出第6个字符之前的所有字符
print(str3[5:]) # 输出第6个字符及以后的所有字符
print(str3[-5:]) # 输出倒数第5个字符及以后的所有字符
有时候我们需要对一个字符串依照某种规则进行分割,得到若干个子串。比如,我们以逗号为分割标识,将“hello,world!”分割为两个子串“hello”和“world!”。
Python提供了split方法实现字符串分割功能,其语法为:
变量.split("分割标示符号"[分割次数])
# 字符串分割 split
sub_str_list =str3.split(',')
print(sub_str_list)
输出为:
['hello', ' world!']
Split会返回一个列表结构,这个结构里面存储了分割之后的所有子串。如果找不到分割标识符号,则返回的列表中只有一个元素,就是原始字符串。
看下面的例子,我们指定分割次数后会怎么样:
# 字符串分割 split
sub_str_list =str3.split(',')
print(str3.split('o'))
print(str3.split('o', 1))
输出为:
['hell', ', w', 'rld!']
['hell', ', world!']
如果我们不指定分割次数,会分割为3个子串。如果我们指定只分割1次,则被分割成了2个子串。
Split只能满足一些简单固定的分割规则,对于比较复杂的规则,我们可以采用正则表达式,它的功能就非常强大了。后面我们会专门拿一个章节来讲解正则表达式,这里不展开了。
我们通常使用下面两种方式来实现字符串的连接:
1、通过加号+实现
2、通过join方法实现
语法: str.join(sequence)
sequence -- 要连接的元素序列,可以是元组或者列表。
str1.join([s1,s2, s3])
它的连接结果是:
s1-str1-s2-str1-s3
如下实例所示:
# 字符串连接
str3=’ hello, world!’
str4 = ' I am Tiger.'
print(str3 + str4 + " Glad to see you ! ")
print(''.join([str3,str4, " Glad to see you ! "]))
print('**'.join(["aa","bb", "cc"])) #aa**bb**cc
输出为:
hello, world! I am Tiger. Glad to see you !
hello, world! I am Tiger. Glad to see you !
aa**bb**cc
这两种方法实现的效果是一样的,但是他们的实现逻辑却有很大的区别。基于效率的考虑,如果连接的字符串超过2个,建议尽量采用join方法。
加号连接字符串,每连接一个字符串时,系统会分配一次内存,如果连接N个字符串,那么需要分配N-1次内存,性能消耗较大。
而join方法,则是在一开始会计算列表中所有字符串的总长度并一次分配好内存,所以它的性能会高一些。
下一节我们继续讲string的操作方法。
本节课程的视频和实例源码下载方式:点击->我的主页,查看个人简介。
我尽量坚持每日更新一节。