零基础学习 Python 之字符串
初识字符串
维基百科对于字符串的定义式:字符串是由零个或者多个字符组成的有限串行。你之前学会敲的第一行 print 代码里的 “Hello World”,就是一个字符串。字符串的本质就是一串字符,不管是中文还是英文抑或是空格等特殊字符都可以作为字符串来看待。
在 Python 里,字符串和上一篇文章( 零基础学习 Python 之数字与运算 )里讲到的数字一样,都是一种对象类型,字符串类型用 str 表示,用英文的单引号或双引号括起来。
>>> 'good good study'
'good good study'
>>> "day day up"
'day day up'
字符串与变量
上面我说到字符串和数字都是一种对象类型,那么在上篇文章中我们说数字可以有变量指向它,那么字符串当然也可以。
>>> string = 'Hello World'
>>> string
'Hello World'
>>> print(string)
Hello World
字符串连接
如果我有两个字符串,分别是 ‘Hello’ 和 ‘World’,那么我想得到 ‘Hello World’ 那可咋整?别怕,Python 里提供了特别简单的办法,那就是相加,就是你们知道的那个加减乘除的那个加。
>>> a = 'Hello'
>>> b = 'World'
>>> a + b
'HelloWorld'
>>> a + ' ' + b
'Hello World'
但是相加只是限同种类型的,比如字符串和字符串相加,数字和数字相加,字符串和数字不可以,会报错。
这里再多说一点,字符串其实还可以乘,看下面的例子就知道怎么用了:
>>> string = 'Python'
>>> string * 3
'PythonPythonPython'
就至此为止了,减和除你们就不用想了。
Python 转义字符
什么时候能用到转义字符呢?下面我们看一个例子:
>>> 'what's your name'
File "<stdin>", line 1
'what's your name'
^
SyntaxError: invalid syntax
为什么会报错呢?眼尖的朋友们可能已经看出来了,字符串里有三个单引号,这样解释器就尴尬了,不知道单引号包裹的到底是谁,所以只好报错了。那么有什么解决办法呢?一种是用 双引号包裹整个字符串,另一个就是要用到我们接下来要说的转义字符了。
>>> "what's your name"
"what's your name"
>>> 'what\'s your name'
"what's your name"
下面给大家放一张常用转义字符的图片,感兴趣的朋友们可以去试试,在交互环境中都是可操作的。
原始字符串
原始字符串就是字符串里的每个字母都是自己原汁原味的,我们 \n 就是 \n ,不是换行符。一种方法就是用上述的转译字符,此外在这还有一种方法,就是在字符串前面加个 r:
>>> string = "c:\now"
>>> print(string)
c:
ow
>>> print(r'c:\now')
c:\now
索引 & 切片
我们在本篇文章刚开始的时候字符串由多个字符构成,那么在 Python 中如何操作每个字符,这里就用到索引和切片。
索引的话其实是起的一个比较高端的名字,其实就是编号,就像考完试的名次一样,这个不是 Python 所特有的,其他的编程语言也是这么叫。
>>> string = 'I love Python'
>>> string[0]
'I'
>>> string[5]
'e'
要想得到第一个字符,就用 string[0],以后依次类推,它和我们现实中的排名不同的是,它是从 0 开始的,你还记得么?空格等特殊的也是字符,所以它们也是有编号的,这是正向的表示,在 Python 中,字符串的索引还可以倒着表示,从最后一个开始 分别是 -1,-2,-3…..
然后人总是不满足的,我可以通过索引一个一个的找出字符来,那我想找其中的一个子串怎么办?这时候我们的切片就闪亮登场了。如果我想得到 love 这个子串怎么办?具体的操作请见下面的例子:
>>> string = 'I love Python'
>>> string[2:6]
'love'
因为 l 的索引是 2,e 的索引是5,所以我们可以看出来切片的作用区间是左闭右开的,即[2, 6)。这里还有一点要说的是,字符串的切片对原字符串没有影响,不会改变它。
切片还有很多有意思的操作,可以切的多姿多彩:
>>> string = 'I love Python'
>>> a = string[3:] #得到从3号到最后的字符串
>>> a
'ove Python'
>>> b = string[:8] #得到从第1个字符到第7个字符
>>> b
'I love P'
>>> c = string[:] #得到所有的字符
>>> c
'I love Python'
是不是觉得很有意思呢?切片的写法还有很多,比如如果是倒序的话我该怎么在切片里表示?有兴趣的可以自己去尝试。
字符串格式化输出
Python 中的格式化和我们所熟知的对磁盘中的分区进行初始化是不一样的概念,我们这里说的是对字符串的格式化,所谓字符串的格式化就是我们先定义一个模板,然后在这个模板的一处或者几处地方留出空位来,然后在那些空位上填上符合设定条件的字符串,并显示结果,这些留出来的空位我们称为占位符。下面我用具体的例子来说明。
>>> 'I love %s' #这里的 %s 就是一个占位符
'I love %s'
>>> 'I love %s' %'Python'
'I love Python'
这种方法是原先很常用的一种方法,现在用的更多的是 format() 方法,下面我来展示具体的用法:
>>> 'I love {0} and {1}'.format('C++','Python')
'I love C++ and Python'
在 format 里面 {0},{1} 就成了占位符,然后不要忘了字符串和 format 中间那个很重要的英文句号。
常用的字符串方法
字符串里的方法有很多,可以通过 dir(str)查看,这么多的方法我不会在这一一介绍,如果想使用的话,可以使用 help() 查看,这里仅仅列举几个常用的。
- find():检测字符串是否包含特定字符,如果包含,则返回开始的索引;否则,返回-1。
- index():检测字符串是否包含指定字符,如果包含,则返回开始的索引值,否则,提示错误.
- count(str1,start,end):返回str1在string中指定索引范围内[start, end)出现的次数。
- replace(str1,count):将str1中的str1替换成str2,如果指定count,则不超过count次。
- replace(str1,count):将str1中的str1替换成str2,如果指定count,则不超过count次。
- split(‘分界符’,maxsplit):maxSplit默认值为-1,表示根据定界符分割所有能分割的,返回值为列表,如果 maxsplit有指定值,则仅分割 maxsplit 个子字符串。
- strip():去掉字符串左右两边的空白字符。
>>> string = 'i love python'
>>> string.find('ov') #检查 str 是否在 string 里面
3
>>> string.index('l')
2
>>> string.count('i',0,5)
1
我这里就随便演示了前三个,当然字符串的方法不只这些,这些函数在交互模式里很好实现,如果没事的话可以随时看几个,在交互模式里按照我上面的样子自己动手试试,这样在用到某个方法的时候才能想起来有,否则的话再自己去写很多代码去实现本身就存在的方法,很是浪费时间。
写在最后
更多内容,欢迎关注公众号「Python空间」,期待和你的交流。