python学习笔记(二)、字符串操作

时间:2021-11-18 16:27:02

该一系列python学习笔记都是根据《Python基础教程(第3版)》内容所记录整理的

1.字符串基本操作

  所有标准序列操作(索引、切片、乘法、成员资格检查、长度、最小值和最大值)都适用于字符串,但字符串是不可变的,所有元素赋值、切片赋值等操作都是非法的。

2.设置字符串的格式

  这里设置字符串格式的基本思想是对字符串调用方法format,并提供要设置其格式的值。每个值都被插入字符串中,以替换用花括号 {} 括起的替换字段。要在最终结果中包含花括号,可以在格式字符串中使用两个花括号(即{{...}})来指定,如f"{{a:math.e.2f}}".format(a=math.pi)

  在格式字符串中,最重要的是替换字段。替换字段由如下部分组成,其中每个部分都是可选的。

  • 字段名:索引或标识符,指出要设置哪个值的格式并使用结果来替换该字段,其中每个部分都是可选的。如:'{2} {psd} {0} {name} {1}'.format('a','b','c','d',name='ee',psd='ff'),结果为:  c ff a ee b
  • 转换标志:跟在叹号后面的单个字符。当前支持的字符包括r(表示repr)、s(表示str)和a(表示ASCII)。如:print('{pi!s} {pi!r} {pi!a}'.format(pi = 'π'))   结果为:π 'π' '\u3c0'
  • 格式说明符:跟在冒号后面的表达式。格式说明符能够让我们够详细的指定最终的格式,包括格式类型(如字符串、浮点数或十六进制等),字段宽度和数的精度,如何显示符号和千位分隔符,以及各种对齐和填充方式。

3.转换说明符

  format = 'Hello, %s.  %s enough for ya'

  values = ('word','Hot')

  print(format % values)  ——> Hell0, word. Hot enough for ya

  上述格式字符串中的 %s 称为转换说明符,指出了要将值插入什么地方。s意味着将值视为字符串进行格式设置。

4.替换字段名

  str1 = '{foo} {1} {bar} {0}'

  print(str1.format(1,2,bar=4,foo=3))  ——> 3 1 4 2

5.基本转换

  指定要在字段中包含的值后,就可添加有关如何设置其格式的指令了。首先,可以提供一个转换标志

  print('{pi!s} {pi!r} {pi!a}'.format(pi = 'π'))   ——> π 'π' '\u3c0'

  你还可以指定要转换的值将其视为那种类型。

  print('The float is {num:f}'.format(num=42))  ——> 42.000000 (默认保留后六位小数)

  类型     含义

  b        将整数表示为二进制

  c        将整数解读为Unicode码点

  d        将整数视为十进制数进行处理,这是整数默认使用的说明符

  e        使用科学表示法来表示小数(用e来表示指数)

  E        与e 相同,但使用E来表示指数

  f         将小数表示为定点数

  F        与f 相同,但对于特殊值(nan和inf),使用大写表示

  g        自动在定点表示法和科学表示法之间做出选择。这是默认用于小数的说明符,但在默认情况下至少有1位小数

  G        与g 相同,但用大写来表示指数和特殊值

  n         与g 相同,但插入随区域而异的数字分隔符

  o         将整数表示为八进制

  s         保存字符串的格式不变,这是默认用于字符串的说明符

  x        将整数表示为十六进制数并使用小写字母

  X        与x 相同,但使用大写字母

  %        将数表示为百分比值(乘以100,按说明符 f 设置格式,再在后面加上%)

6.宽度、精度和千位分隔符

  宽度是使用整数指定的,如下所示:

  print('{num:10}'.format(num=3))  ——> '         3'

  print('{num:10}'format(num='3'))  ——> '3         '

  如你所见,数对齐方式是向右对齐,字符串是向左对齐。

  精度也是使用整数指定的,如下所示:

  print('pi = {num:.2f}'.format(num=math.pi))  ——> pi = 3.14

  最后,可以使用逗号来指出你要添加的 千位分隔符

  print('{num:,}'.format(num=1000*1000))  ——> 1,000,000

  三种模式可以嵌套使用,但表示千位分隔符的 ,号要放在宽度和精度之间,如:str1={pi:10,2f}

7.符号、对齐和用0填充

  在指定宽度和精度的数前面,可以添加一个标志。这个标志可以是零、加好、减号或空格,其中零表示使用0来填充数字,如:'{:010.2f}'.format(math.pi)         '0000003.14'

  指定对齐方式:左对齐( < )、右对齐( > )、居中( ^ )。

  还有更具体的说明符 = ,它指定将填充字符放在符号(-/+)和数字之间。如:'{:=10.2f}'.format(-math.pi))  ——> '-      3.14'

  最后要了解的是 井号( # ),将其放在符号说明符( : )和宽度之间(如果指定了这两种设置)。这个选项将触发另一种转换方式,转换细节随类型而异。例如,对于二进制、八进制和十六进制转换,将加上对于前缀符号。

8.字符串方法

  这里只介绍比较常用的一些方法,如果想详细了解,请查验API。

  8.1  center

    方法center通过再两边添加填充字符(默认为空格)让字符串居中。center(40,'*')

  8.2 find

    方法find在字符串中查找子串。如果找到就返回第一个字符的索引,否则返回 -1。该方法还可以指定起点和终点,如:str.find('a',1)、str.find('a',0,30)。值得注意的是,该指定范围只包含起点,不包含终点。

  8.3 join

    方法join用于合并序列的元素,与split相反。如:''.join([.....])、'+'.join((......))。并且所有合并序列的元素都必须是字符串,且合并的时候会自动省略掉相同的元素。

    print('+'.join({'a','b','a','c'}))   ——> a+c+b(合并顺序随机)

  8.4 lower

    方法lower返回字符串的小写。

  8.5 upper

    方法upper返回字符串的大写。

  8.6 title

    方法title返回字符串的首字符大写。

  8.7 replace

    方法replace将指定子串都替换为另一个字符串,并返回替换后的结果。如:str.replace('x','aa')

  8.8 split

    方法split用于将字符串拆分为序列。如:str.split('+')、str.split()

  8.9 strip

    方法strip用于去掉字符串的开头和结尾的空格。

    你还可以在一个字符串参数中指定要删除那些字符。如:'***AA*AA!!!**'.strip('*!')  ——> AA*AA

  8.10 translate

    方法translate与replace一样替换字符串的特定部分,但不同的是它只能进行单字符串替换。这个方法的优势在于能够同时替换多个字符,因此效率上比replace高。

    然而,在使用translate前必须创建一个转换表。这个转换表指出了不同Unicode码点之间的转换关系。要创建转换表,可对字符串类型str调用方法maketrans,这个方法接收两个参数:两个长度相同的字符串,表示将第一个字符串中的每个字符都替换为第二个字符串中对应的字符。

    table = str.maketrans('cs','kz')

    str1.translate(table)

9 判断字符串是否满足特定的条件

  很多字符串方法都以 is 打头,如isspace、isdigit、isuppe,它们判断字符串是否具有特定的性质(如包含的字符全为空白、数字或大写)。如果条件满足,则返回True,否则返回False。

  isalnum、isalpha、isdecimal、isdigit、isidentifier、islower、isnumeric、isprinttable、isspace、istitle、isupper..............