Python3学习笔记 | 四、Python的类型与运算-字符串(上)

  • 2019 年 10 月 6 日
  • 筆記

一、字符串简介

在Python里字符串是一个有序的字符的集合,用来存储和表现基于文本的信息。字符串可以用来表示能够像文本那样编辑的任何信息:符号和词语、在入道内存中的文本的内容、Internet网址和Python程序等。

在Python里字符串被划分为不可变序列这一类别,这意味着这些字符串所包含的字符存在从左至右的位置顺序,并且他们不可以在远处修改。字符串在Python里属于一个序列类型的对象类别,在后面介绍的列表,元组都是序列类型。在这章对文本的操作,很多都能应用于序列类型的对象类别。

二、字符串常量

在Python里有很多种方法来表示字符串: • 单引号:’Text”1”‘ • 双引号:”Text’1’” • 三引号:’’’…Lines…’’’,”””…Lines…”””. • 转义字符:”Line1tadded tabnLine2”

• Raw字符串:r”C:MynewDirectoryfile.exe” • Python 3.x中的Byte字符串:b’Tex01xt’ • Python 2.x中的Unicode字符串:u’myu0020text’

在Python 3.x里默认是使用Unicode方式存储字符串,在Python 2.x里默认是使用Latin-1方式存储字符串,因此不能直接识别中文。

# -*- encoding=utf8 -*-

在Python2.x脚本文件加上上面一句话就能正常使用中文。

1、转义

跟其他开发语言相通,Python也有转义字符:(反斜杠)

当我们在一个字符串里需要同时使用单引号(‘)和双引号(“)的时候,根据我们所使用的表示字符串的引号类型进行转义。

>>>'a"b'c'

在这里,我们要输入的字符串为a”b’c。

因为我们使用单引号来表示字符串的开始和结尾,所以b后面的单引号需要转义。当我们使用双引号来表示字符串,我们需要在双引号前面使用反斜杠进行转义:

>>>s = "a"b'c"

除了这两个,我们还有很多反斜杠加上单个字符来进行转义的。

newline:忽视新行(连续)#newline就是按键盘上的enter(或return)

:反斜杠,因为反斜杠本身就是转义字符,所以两个反斜杠才能表示一个。

’ :单引号

”:双引号

a:响铃

b:倒退(一位)

f:换页(下一页,同一列。特定终端下可用。)

n:新行(换行)

r :返回(返回到开始)

t :水平制表符

v :垂直制表符

uhhhh:Unicode 16位的十六进制值

Uhhhhhhhh:Unicode 32位的十六进制值

xhh:十六进制值

ooo:八进制值

:Null(不是字符串结尾)

other:不转义

转义测试:

>>> print('abc')  a b c  >>> print('tteexttaannddEND')  t       eex            an  ddEND  >>> print('u0043')  C  >>> print('U00000043')  C

2、raw印制转义

在Python里我们有的时候是需要印制转义的。比如,当有个Windows的目录如下:

>>> print('C:newfilefiles')  C:  ewfileiles

这个时候,要是按正常来说,n和f都会被转移,但我们写双斜杠又麻烦,这个时候可以使用raw字符串来印制转义。

>>> print(r'C:newfilefiles')  C:newfilefiles

这个时候其值会跟写的完全一样,当然,我们也可以写成如下:

>>> print('C:\newfile\files')  C:newfilefiles

但是还是没有使用印制转义方便,特别是在路径很长的时候。

三、字符串操作

1、len()

在Python里有很多函数,可以对字符串进行操作:len()是看字符串长度的。

>>> print(len('小小哆啦'))  4

当我们使用unicode的时候,按中文字符的个数显示,但使用python2.x里的默认 字符编码,就会是三倍的数值。

因为Python3开始,默认字符编码是unicode,所以在Python3.x里是没有问题的。

2、合并字符串

字符串合并,重复等,跟数字的操作类似:

>>> 'Dora'+'Emon'  'DoraEmon'  >>> 'Dora'*7  'DoraDoraDoraDoraDoraDoraDora'

这里的第二个操作可以为我们节省很多字符输入,比如我们需要输入如下:

>>> print('-----……-----')     #80个“-”  -----……-----

这个可以使用如下方法简单实现:

>>> print('-'*80)  -----……-----

当需要字符合并的时候,如下方法也可以,但不建议使用。

>>> 'Dora''Emon'  'DoraEmon'  >>> 'Dora' 'Emon'  'DoraEmon'

3、顺序提取字符

当我们需要对每个字符串进行操作的时候,可以如下进行操作:

>>> for DaXiong in 'DoraEmon':  ...     print(DaXiong,end=' ')  ...  D o r a E m o n

这个意思是,我们从a字符串(序列)里按顺序提取字符,进行操作。关于循环,后面在函数章节讲解。

4、判断存在字符

我们需要知道某个字符是否在一个字符串的时候,可以使用in或者not in来判断:

>>> 'D' in 'DoraEmon'  True  >>> 'D'not in 'DoraEmon'  False  >>> 'X' in 'DoraEmon'  False

5、字符串分片

我们也可以对字符串分片,比如对DoraEmon,我们只需要第一个字符,第三个字符,或者中间两个字符,后两个字符等等。

>>> Dora='DoraEmon'  >>> Dora[1],Dora[5],Dora[-3]  ('o', 'm', 'm')  >>> Dora[1:5]  'oraE'  >>> Dora[-5:-1]  'aEmo'  >>> Dora[3:]  'aEmon'  >>> Dora[:-5]  'Dor'  >>> Dora[:]  'DoraEmon'

看一下在Python里对字符串的分段是如何进行的,例如:text=“ThisIsTestText”

提取单个字母时,需使用字母前的数字。比如:h,就是1或者-13,提取范围时是开始字母的前面的数字到最后字母的后面数字。比如h到x,就是[1,13]或者[-13,13]或者[1,-1]或者[-13,-1],从开始到某个字母就可以[:3];从某个字幕到结尾就是[3:]。

分片操作还可以有第三个参数,间隔。我们要第一个字母开始,每隔一个字母显示,结果应该是“DrEo”

>>> Dora='DoraEmon'  >>> Dora[::2]  'DrEo'

或者从第二个字母开始:

>>> Dora[1::2]  'oamn'

或者我们要倒过来:

>>> Dora[::-1]  'nomEaroD'  >>> Dora[-1:1:-1]  'nomEar'

6、字符串转换

当我们需要对字符串大小写等操作的时候,需要对字符串转换成相应的代码。这个时候我们就需要两个函数:ord和chr,ord是把一个字符转换成数字,chr是把数字转换成单个字符。

>>> ord('D')  68  >>> chr(68)  'D'  >>> ord('小')  23567  >>> chr(23567)  '小'

注:在Python3.x里可以直接使用中文字符,但是在Python2.x就不能直接用了。

用这两个函数,可以对字符串转换进行简单的大小写操作了,比如:把一个字符串里的内容全转换成大些:

>>> DORA=''  #初始化DORA  >>> Dora='DoraEmon'  #设置Dora  >>> for DaXiong in Dora:  #循环,按顺序提取Dora字符串内容  ...     DaXiong_code=ord(DaXiong)  #字符转换成ascII码  ...     if 97<=DaXiong_code and DaXiong_code <=122:  #当值大于等于97(a的值)或小于等于122(z的值)  ...         DORA+=chr(DaXiong_code-32)  #在值的基础上减32(大小写之间的差距)  ...     else:...         DORA+=DaXiong  #其余情况不变  ...  >>> DORA  'DORAEMON'

7、字符串序列

在Python里字符串算是序列,但是字符串是不可修改的对象,所以如下操作不能正常被执行:

>>> Dora='DoraEmon'  >>> Dora[3]='DaXiong'  Traceback (most recent call last):   File "<stdin>", line 1, in <module>  TypeError: 'str' object does not support item assignment

但是我们可以重新给原来的变量赋值:

>>> Dora='DaXiong'+Dora[3:]  >>> Dora  'DaXiongEmon'