标准序列的常规操作(索引、切片、乘法、成员资格检查、长度等)适用于字符串,但字符串是不可变的数据类型,因此元素赋值和切片赋值是非法的。
这里介绍字符串两个方面:字符串格式设置 字符串方法
1、设置字符串格式(format):基础版
使用字符串格式设置运算符----%,并在%右边指定格式的值。指定要设置其格式的值时,可使用单个值(如字符串,数字等)
,亦可使用元组(设置多个值)或者字典。
另一种解决方案‘format’
(1)替换字段没有名称或将索引用作名称
>>> '{}, {}, {}'.format('first', 'second', 'third')
'first, second, third'
>>> '{2}, {1}, {0}'.format('first', 'second', 'third')
'third, second, first'
(2)命名字段
>>> from math import pi
>>> '{name} is approximately {value:.3f}'.format(name = 'pi',value = pi)
# 使用格式说明符'.3f',并使用冒号将其与字段隔开,意味着要使用包含3位小数的浮点数格式
'pi is approximately 3.142'
2、 设置字符串的格式:完整版
格式字符串中,替换字段由如下部分组成,其中每部分都是可选的。
- 字段名:索引或标识符,指出要设置哪个值的格式并使用结果来替换该字段。除指定值外,还可以指定值的特定部分,如列表的元素
- 转换标志:跟在叹号后面的单个字符。当前支持的字符包括r(repr)、s(str)、a(ascii)。如果你指定了转换标志,将不使用对象本身的格式设置机制,而是使用指定的函数将对象转换成字符串,在做进一步的格式设置。
- 格式说明符:跟在冒号后面的表达式,格式说明符让我们能够详细的指定最终格式,包括格式类型(如字符串、整数、浮点数等),字段的宽度和数字的精度,如何显示符号和千分位分隔符,以及各种对齐和填充方式
2.1替换字段名
按顺序和参数配对
>>> '{first} {} {third} {}'.format(2,4,first=1,third=3) # 位置参数在前,按顺序指定给未命名字段,然后按命名参数指定命名字段
'1 2 3 4'
也可使用索引值和命名参数指定
>>> '{first} {1} {third} {0}'.format(2,4,first=1,third=3)
'1 4 3 2'
不能同时使用手工编号和自动编号
>>> '{first} {1} {third} {}'.format(2,4,first=1,third=3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: cannot switch from manual field specification to automatic field numbering
2.2 基本转换
指定在字段中包含的值以后就可以设置其格式的指令了。
>>> 'the number is {num:f}'.format(num=100)
'the number is 100.000000'
>>> 'the number is {num:b}'.format(num=100)
'the number is 1100100'
2.3宽度、精度和千分位
在格式说明中指定宽度和精度
宽度是使用整数指定的如下所示:
>>> '{num:10}'.format(num=1)
' 1'
>>> '{name:10}'.format(name='zhao')
'zhao '
精度也是由整数指定,但需要在之前加上一个表示小数点的句点
>>> '{π:10.5f}'.format(π=pi)
' 3.14159'
使用逗号指出需要添加的千位分隔符
>>> '{:,}'.format(1000000)
'1,000,000'
2.4符号、对齐、填充
填充
用0填充
>>> '{0:0^15}'.format('zhao')
'00000zhao000000'
其他符号填充
>>> '{:*^10}'.format('zhao')
'***zhao***'
对齐
可以使用 <、>和^,指定左对齐、右对齐、居中
>>> print('{:<10}
{:^10}
{:>10}'.format('zhao','qian','sun'))
zhao
qian
sun
3.4 字符串常用方法
center()== 》S.center(width[, fillchar]) -> str
方法center通过在两边添加填充字符(默认空格)让字符串居中
>>> 'zhao'.center(10, '*')
'***zhao***'
>>> 'zhao'.center(10)
' zhao '
find() == 》S.find(sub[, start[, end]]) -> int
方法find()在字符串中查找子串,如果找到就返回子串第一个字符的索引,否则返回 -1
>>> 'zhao'.find('a')
2
>>> 'zhao'.find('ao')
2
还可指定搜索的起点和终点
>>> 'zhaoqianzhao'.find('zhao',1)
8
>>> 'zhaoqian'.find('a',3,8) #包含起点不包含终点
6
john() ==》 S.join(iterable) -> str
John方法是非常重要的字符串方法,其作用与split()相反,用于合并序列的元素
>>> l1 = ['zhao','qian','sun']
>>> '.' . join(l1)
'zhao.qian.sun'
lower() == 》S.lower() -> str
返回字符串的小写版本
>>> 'ZHAO'.lower()
'zhao'
replace() == 》 S.replace(old, new[, count]) -> str
>>> 'zhao'.replace('zhao','qian')
'qian'
>>> 'zhaozhaozhao'.replace('zhao','qian',2)
'qianqianzhao'
split() == 》S.split(sep=None, maxsplit=-1) -> list of strings
split()方法与Join()方法相反,用于将字符串转换序列
>>> 'z h a o'.split()
['z', 'h', 'a', 'o']
>>> 'z!h!a!o'.split('!')
['z', 'h', 'a', 'o']
strip() == 》S.strip([chars]) -> str
strip()方法将字符串开头和结尾的空白删除,并返回删除后的结果
>>> 'zhao '.strip()
'zhao'
translate() == 》S.translate(table) -> str
translate()与replace ()一样替换字符串的特定部分,但不同的是它只能进行含有单字符替换,优势在于可以同时替换多个字符,因此比replace()效率高
使用translate()需要先创建一个转换表,可对字符串调用maketrans,这个方法接受两个参数:两个相同长度的字符串,指定要将第一个字符串中的每个字符都替换为第二个字符串中相应字符
>>> table = str.maketrans('cs','kz')
>>> table
{99: 107, 115: 122}
>>> 'this is cool'.translate(table)
'thiz iz kool'
调用maketrans()方法时,还可以提供第三个可选参数,指定要将那些字母删除
>>> table = str.maketrans('cs','kz','o')
>>> 'this is cool'.translate(table)
'thiz iz kl'
判断字符串是否满足特定条件
很多字符串方法以is开头,他们判断字符串是否具有特定性质,这些方法返回False 或 True