字符串

程序员写代码,经常要做字符串操作。

Python语言是讲究实用的语言,所以对字符串操作的支持也非常的给力。


字符串的定义

前面的课程,我们已经看到字符串是这样写的

'你好'

这里字符串是用单引号括起来的

其实字符串还可以 用 双引号单三引号双三引号,下面的定义都是正确的

"你好"
'''你好'''
"""你好"""


其中三引号的特点就是 支持跨行的 字符串。如下

letter = '''刘总:
   您好!
   您发的货我们已经收到,明天就回把余款付清。
              
               祝: 商祺。
               小徐
               2016-06-12'''

print(letter)

上面是一封信的内容,可以直接放到三引号里面。

大家可以拷贝上面的代码保存到文件中,运行一下看看。

所以,如果字符串的内容有跨行,用三引号就特别方便直观。

如果不使用三引号定义字符串, 通常只能在字符串中 使用 \n 转义符表示换行。

就得像这样定义:

letter = '刘总:\n   您好!\n   您发的货我们已经收到,明天就回把余款付清。\n              \n               祝: 商祺。\n               小徐\n               2016-06-12'

字符串内容其实是一样的,但是这样写就非常的麻烦,而且不直观。



大家要注意:

字符串定义前后的引号,只是告诉解释器,引号内部 的内容就是一个字符串对象的内容。

前后的引号本身 并不是 字符串的内容。

也就是说,像这样定义的一个字符串

var = '你好'

字符串对象的内容是 你好, 而不是 '你好'



字符串中有引号

如果字符串内容里面就有引号,我们通常在定义的时候,使用和字符串内容中不用的引号。

比如:字符串 He said : 'OK, I will go now'

字符串内容里面有单引号,那么我们在定义这个字符串的时候,就应该用双引号。如下:

hello = "He said : 'OK, I will go now'"
print(hello)

否则,就会出现语法错误,大家可以试试下面的写法

hello = 'He said : 'OK, I will go now''
print(hello)

看看会报什么错。



字符串拼接

拼接是字符串常见的操作,可以用加号 把两个字符串连接起来,产生一个新的字符串,像这样

myFavorit = '我最爱的运动是:'
sport = '足球'
print(myFavorit + sport)

运行结果如下

我最爱的运动是:足球



当然,还可以有更多的拼接,像这样

myFavorit = '我最爱的运动有:'
sport1 = '足球'
sport2 = '蓝球'
print( myFavorit + sport1 + '---' + myFavorit + sport2 )



字符串元素索引

大家看看这个字符串

'刘总你好啊'

大家从字符串内容就可以看出,里面有5个字符,每个字符都是这个字符串的一个元素

字符串就是由一个个 元素 — 字符 组成的。

像这种由一个个 元素依次组成的字符串, Python语言里面,把这种特性的数据称之为 sequence,翻译成中文就是序列

字符串就是一种序列。

序列里面的元素都是有索引的。 所谓索引就是元素的下标,如下图所示

image

特别特别要注意的是,字符串元素的索引是从 0 开始,而不是从1 开始。

上面的字符串

这个字符的索引是 0 ,

这个字符的索引是 1 ,

这个字符的索引是 2 ,

这个字符的索引是 3 ,

这个字符的索引是 4 ,

Python可以用索引来获取一个字符串中的某个字符 ,对于这样的一个字符串定义

hello = '刘总你好啊'

这个字符可以这样获取 hello[0] , 运行如下代码看看

hello = '刘总你好啊'
print(hello[0])

这个字符可以这样获取 hello[1],

这个字符可以这样获取 hello[2] ,

这个字符可以这样获取 hello[3] ,

这个字符可以这样获取 hello[4] ,

根据这个规则,一个长度为 len 的字符串, 它的最后一个字符的下标是len-1。


如果是这样的一行代码呢?

hello = '刘总你好啊'
print(hello[5])

由于并不存在一个下标索引为5 的元素, 就会报下面这样的错误

IndexError: string index out of range



而且Python还支持用负数表示字符串的索引, 最后一个字符的索引是-1, 倒数第二个是 -2, 以此类推

所以 ,也可以说,上面的字符串

这个字符的索引是 -1 , 可以这样获取 hello[-1] ,

这个字符的索引是 -2 , 可以这样获取 hello[-2] ,

这个字符的索引是 -3 , 可以这样获取 hello[-3] ,

这个字符的索引是 -4 , 可以这样获取 hello[-4] ,

这个字符的索引是 -5 , 可以这样获取 hello[-5] ,

负数下标有什么用处呢?

比如一个很长的字符串

str1 = 'cHl0aG9uMy52aXAlMjAlRTclOTklQkQlRTYlOUMlODglRTklQkIlOTElRTclQkUlQkQlMjAlRTclODklODglRTYlOUQlODMlRTYlODklODAlRTYlOUMlODk='

要获取最后一个元素,不需要去从前往后数下标, 一直数到最后的位置。

而是可以直接用

str1[-1]

就可以了,这样就方便了很多



字符串切片

sequence特性的数据对象 都支持切片操作, 字符串是具有sequence特性的,当然也支持切片。

什么是切片, 形象的说,好像用刀切出其中的一部分

比如我要把

hello = '刘总你好啊'

这个字符串切出其中 你好 这部分内容,

假想我们手里有把刀,要从下面的字符串中切出你好,就应该在箭头所示的地方切两刀,就得到 你好 这个 子字符串了

image

那么我们看看这两刀 对应的索引的位置。

如果用正数表示就是 2和4 , Python中可以用 hello[2:4] 这样的切片表达式来得到该字符串。 大家可以运行如下代码看看

hello = '刘总你好啊'
print(hello[2:4])

当然也可以用负数表示, 就是 2和4 , Python中可以用 hello[-3:-1] 这样的切片表达式来得到该字符串。 大家可以运行如下代码看看

hello = '刘总你好啊'
print(hello[-3:-1])

字符串切片前面的索引是切片开始的元素的 索引,

后面的索引是切片结束的元素的 索引 + 1


省略一个切片索引

如果我们要得到’刘总你好啊’ 当中 你好啊 这3个字 又该怎么切片呢?

可以用 hello[2:5]

还可以用 hello[2:]后面的索引 空着不写,表示到整个字符串的结束

相应的,如果 前面的索引 不写,可以表示 从字符串的开头切片, 比如 hello[:2] ,就是切出 刘总 这两个字



获取字符串长度

内置函数 len 可以用来获取字符串的长度,也是获取字符串中字符的个数

比如

var = '特朗普总统'
lenth = len(var)
print(lenth)

返回结果是5,因为var变量对应的字符串长度就是5个字符。




课后练习

去做练习

上一页 下一页