13. 详解字符串
13.1 转义字符
- \ 转义符,续行符
- 作为转义符时,在\后面出现的字符可能会实现另外一种意义
- 续行符在行尾使用\,可以换行继续书写内容
- \n 换行符
- \r 代表光标位置(从\r出现的位置开始作为光标的起点),之前的内容都没了
print('nice to meet \r you my dear') - \t 水平制表符(table缩进)
- \b 退格,回删键
- \ 一个\是转义符,再加一个\就会取消转义,变成普通\输出
print('nice to meet \\r you my dear') - 把转义字符作为普通字符输出,在字符串前面加 r' ' print( r'\n' )
13.2 字符串相关操作
- 字符串 + 操作 :字符串拼接
- 字符串 * 操作 :字符串重复输出
- 字符串 [ ] 切片操作
- 字符串的索引操作,只能访问,不能修改
- 正数从0,倒着数从-1
vars = 'abcd,efg'
print(vars[4])
print(vars[-2])
字符串的切片操作
[开始值:结束值:步进值]
开始值默认值为0,结束值默认是最后一个下标,步进值默认1
print(vars)
print(vars[3]) # 写一个值就是获取指定下标的元素
print(vars[2:5]) # 从2下标开始取值,到5之前,取到2,取不到5
print(vars[2:7:2]) # cd,ef --> c,f
print(vars[::2]) # 从头取到尾,每隔一个取一个
print(vars[::-1]) # 字符串倒转过来取
练习
利用切片操作,实现一个trim()函数,去除字符串首尾的空格
def trim(s):
while s and s[-1]==' ':
s=s[:-1]
while s and s[0]==' ':
s=s[1:]
return s
## updated
def trim(s):
while s[:1]==' ':
s=s[1:]
while s[-1:]==' ':
s=s[:-1]
return s
13.3 字符串格式化的方法
format()格式化
# 1.普通方式
a = 'libai went up to the ship'
b = '{} to see a friend'.format(a)
c = '{} to see {}'.format(a,'a friend')
print(b)
print(c)
# 2. 通过索引传参 0 1 2
d = '{2} to see {1}'.format(a,'a friend', 'oh')
print(d)
# 3. 关键字传参
e = '{ee} to see {eee}'.format(ee='libai',eee='a friend')
print(e)
# 4. 容器类型数据传参
f = 'coach:{}, tutor:{}, PD:{}'.format('who','where','what')
print(f)
g = {'a':'John','b':'lily'}
h = '{a} is making with {b}'.format(**g)
print(h)
-
3.7 中新增的格式化方法
g = {'a':'John','b':'lily'}
m = f'{g["a"]} is making with {g["b"]}'
print(m)
- 限定小数位数
n = '圆周率:{:.2f}'.format(3.1415926)
print(n)
format 格式化用法
13.4 字符串函数
13.4.1 英文字符与字符检测相关函数
1)、大小写转换
# str.capitalize() 返回原字符串的副本,首个字符大写,其余小写
a = 'iloneu'
r = a.capitalize()
print(r)
# str.title() 返回原字符的副本,把字符串中的每个单词首字母大写
b = 'what a exhausted day'
rr = b.title()
print(rr)
# str.upper() 把字符串中的英文字符全部转为 大写
# str.lower() 把字符串中的英文字符全部转为 小写
# str.swapcase() 把字符串中的英文字符大小写互换
rr = rr.swapcase()
print(rr)
2)、字符检测
- str.isupper() 检测字符串中的英文字符是否全为 大写
- str.islower() 检测字符串中的英文字符是否全为 小写
- str.istitle() 检测字符串中的英文字符是否标题的要求
- str.isalnum() 检测当前字符串是否由字符(中文、英文、数字)组成,不包含空格!!
b = 'whataexhausted好1day'
rr = b.isalnum()
print(rr)
- str.isalpha() 检测当前字符串是否由中英文字符组成
- str.isdigit() 检测当前字符串是否由数字字符组成
- str.isspace() 检测当前字符串是否由空格字符组成,只包含空格,无其他
- str.startswith() 检测字符串是否由指定的字符开头的
b = 'what a exhausted号1day'
rr = b.startswith('w')
print(rr)
# 也可以指定开始和结束的位置
rr = b.startswith('t',3)
print(rr)
- str.endswith() 检测字符串是否由指定的字符结束的
# 也可以指定开始和结束的位置
rr = b.startswith('t ',3,5)
print(rr)
rr = b.endswith('ay',10,20)
print(rr)
13.4.2 字符串查找相关函数 - 重点
a = 'iloveyoutosimidailoveyoutosimida'
# 检测一个字符串是否存在字符串中
r = 'love' in a
print(r)
- len() 获取字符串长度
r = len(a)
print(r)
- 获取指定字符在字符串中第一次出现的索引位置,未找到则返回-1
- str.find(sub[,start[,end]) 从左向右 (索引位置都是从左开始0)
r = a.find('love')
print(r)
r = a.find('love',4,21)
print(r)
- str.rfind(sub[,start[,end]) 从右向左 (索引位置都是从左开始0)
r = a.rfind('love')
print(r)
- str.index() 和find方法一样,但是若没找到则报错 ValueError: substring not found
- str.rindex()同理
- str.count(sub[,start[,end]]) 统计字符在字符串中出现的次数
13.4.3 字符串操作相关函数 - 重点
- str.split() 按照指定的字符进行分割,把字符串分割成列表
b = 'user_admin_id_123'
re = b.split('_')
print(re)
print(re.pop()) # 输出列表最后一个字符
print(re.pop()) # 输出列表最后一个字符
- str.split(,) 可以指定分割的次数
b = 'user_admin_id_123'
bb = b.split('_',2)
print(bb)
- str.rsplit(,)
aa = b.rsplit('_') # 没区别
aaa = b.rsplit('_',2) #从后往前分割
print(aa,aaa)
习题 'uid=123&type=ab&kw=hh' ==> 123 ab hh
cc = 'uid=123&type=ab&kw=hh'
re1 = cc.split('&')
for i in re1:
newlist = i.split('=')
print(newlist.pop())
print(re1)
- str.join() 按照指定字符,把容器类型中的数据链接成一个字符串
arr = ['user', 'admin', 'id', '123']
res = '@'.join(arr)
rea = ''.join(arr)
print(res,rea)
- str.strip() 可以去除左右两侧的指定字符
vars = ' this is a title '
res = vars.strip(' ')
print(res)
- str.lstrip() 去除字符串左侧的指定字符
- str.rstrip() 去除字符串右侧的指定字符
- str.replace(old,new[,count]) 替换 res = vars.center(19,'&')
res = vars.ljust(13,'&')
res = vars.rjust(13,'*')
* eval() 函数 - 用来执行一个字符串表达式,并返回表达式的值
eval(expression[, globals[, locals]])
- expression -- 表达式。
- globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
x = 7
y = eval('3*x')
y = eval('pow(3,4)')
y = eval('2+2')
print(y)
字符串对象的 str.rjust() , 可以将字符串靠右, 并在左边填充空格。
str.ljust() 和 str.center()。 这些方法并不会写任何东西, 它们仅仅返回新的字符串。
str.zfill(), 它会在数字的左边填充 0。
'12'.zfill(5)
'-3.14'.zfill(7)
'3.14159265359'.zfill(5)
将输出的值转成字符串,可以使用 repr() 或 str() 函数来实现。
str(): 函数返回一个用户易读的表达形式。
repr(): 产生一个解释器易读的表达形式。
# 输出一个平方与立方的表:
for x in range(1, 11):
print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
# 注意前一行 'end' 的使用
print(repr(x*x*x).rjust(4))
执行 string.ascii_letters 的输出也可以通过哪个实现?
string.ascii_lowercase+string.ascii_upercase
Python3 中 String 模块 ascii_letters 是生成所有字母,从 a-z 和 A-Z。