我们这里以一道某一年小米的面试题开篇:
- 问题:输入字符串‘hello xiao mi’,输出‘mi xiao hello‘
问题倒是不难,但是如果不掌握一些字符串处理方法,那就不好说了 ??,本文中在涉及相关方法的时候,会教你使用一条命令轻松搞定这道题
1.字符串处理基本操作
我们以字符串【s = ‘hello’】为例
-
索引
索引值默认从0开始------>h(0)e(1)l(2)l(3)o(4)
print(s[1])
print(s[0])
-
切片
print(s[0:3]) #切片的规则: s[start:end:step] 从start开始,到end-1结束,step:步长print(s[0:4:2])
#显示所有字符
print(s[:])#显示前3个字符
print(s[:3])#字符串逆序输出
print(s[::-1])#除了第一个字符以外,其他全部输出
print(s[1:])
-
重复
print( s * 10)
-
字符串的拼接
print(‘hello’ + ’ ’ + ‘world’)
-
成员操作符
print(‘h’ in s)
print(‘q’ in s)
2.其他方法总结
用法 | 功能 |
---|---|
capitalize() | 把字符串的第一个字符改为大写 |
casefold() | 把整个字符串的所有字符改为小写 |
center(width) | 将字符串居中,并使用空格填充至长度 width 的新字符串 |
count(sub[, start[, end]]) | 返回 sub 在字符串里边出现的次数,start 和 end 参数表示范围,可选。 |
encode(encoding=‘utf-8’, errors=‘strict’) | 以 encoding 指定的编码格式对字符串进行编码。 |
endswith(sub[, start[, end]]) | 检查字符串是否以 sub 子字符串结束,如果是返回 True,否则返回 False。start 和 end 参数表示范围,可选。 |
expandtabs([tabsize=8]) | 把字符串中的 tab 符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize=8。 |
find(sub[, start[, end]]) | 检测 sub 是否包含在字符串中,如果有则返回索引值,否则返回 -1,start 和 end 参数表示范围,可选。 |
index(sub[, start[, end]]) | 跟 find 方法一样,不过如果 sub 不在 string 中会产生一个异常。 |
isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。 |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。 |
isdecimal() | 如果字符串只包含十进制数字则返回 True,否则返回 False。 |
isdigit() | 如果字符串只包含数字则返回 True,否则返回 False。 |
islower() | 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False。 |
isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False。 |
isspace() | 如果字符串中只包含空格,则返回 True,否则返回 False。 |
istitle() | 如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回 True,否则返回 False。 |
isupper() | 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。 |
join(sub) | 以字符串作为分隔符,插入到 sub 中所有的字符之间。 |
ljust(width) | 返回一个左对齐的字符串,并使用空格填充至长度为 width 的新字符串。 |
lower() | 转换字符串中所有大写字符为小写。 |
lstrip() | 去掉字符串左边的所有空格 |
partition(sub) | 找到子字符串 sub,把字符串分成一个 3 元组 (pre_sub, sub, fol_sub),如果字符串中不包含 sub 则返回 (‘原字符串’, ‘’, ‘’) |
replace(old, new[, count]) | 把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次。 |
rfind(sub[, start[, end]]) | 类似于 find() 方法,不过是从右边开始查找。 |
rindex(sub[, start[, end]]) | 类似于 index() 方法,不过是从右边开始。 |
rjust(width) | 返回一个右对齐的字符串,并使用空格填充至长度为 width 的新字符串。 |
rpartition(sub) | 类似于 partition() 方法,不过是从右边开始查找。 |
rstrip() | 删除字符串末尾的空格。 |
split(sep=None, maxsplit=-1) | 不带参数默认是以空格为分隔符切片字符串,如果 maxsplit 参数有设置,则仅分隔 maxsplit 个子字符串,返回切片后的子字符串拼接的列表。 |
splitlines(([keepends])) | 在输出结果里是否去掉换行符,默认为 False,不包含换行符;如果为 True,则保留换行符。。 |
startswith(prefix[, start[, end]]) | 检查字符串是否以 prefix 开头,是则返回 True,否则返回 False。start 和 end 参数可以指定范围检查,可选。 |
strip([chars]) | 删除字符串前边和后边所有的空格,chars 参数可以定制删除的字符,可选。 |
swapcase() | 翻转字符串中的大小写。 |
title() | 返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串。 |
translate(table) | 根据 table 的规则(可以由 str.maketrans(‘a’, ‘b’) 定制)转换字符串中的字符。 |
upper() | 转换字符串中的所有小写字符为大写。 |
zfill(width) | 返回长度为 width 的字符串,原字符串右对齐,前边用 0 填充。 |
挑两条进行示范:
<1>字符串匹配开头和结尾
- startswith
- endswith
<2>
-
strip
删除字符串前边和后边所有的空格,chars 参数可以定制删除的字符,可选。 -
rstrip
删除字符串末尾的空格 -
lstrip
去掉字符串左边的所有空格
<3>
-
isalnum
如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。 -
isalpha
如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。 -
isdecimal
如果字符串只包含十进制数字则返回 True,否则返回 False。 -
isdigit
如果字符串只包含数字则返回 True,否则返回 False。
练习题:
- 变量名是否合法:
1.变量名只能由字母、数字、下划线组成
2.只能以字母或下划线开头
<4>
-
find
找到子串,并返回最小的索引 -
rfind
找到子串,并返回最大的索引值 -
replace
字符的替换
<5>字符串的对齐
print('学生管理系统'.center(30))
print('学生管理系统'.center(30,'*'))
print('学生管理系统'.center(30,'@'))
print('学生管理系统'.ljust(30,'*'))
print('学生管理系统'.rjust(30,'*'))
<6>字符串的统计
- count
统计指定字符出现的次数 - len
统计整个字符串的长度
<7>字符串的分离与连接
-
split(sep=None, maxsplit=-1)
不带参数默认是以空格为分隔符切片字符串,如果 maxsplit 参数有设置,则仅分隔 maxsplit 个子字符串,返回切片后的子字符串拼接的列表。 -
join(sub)
以字符串作为分隔符,插入到 sub 中所有的字符之间。
等等,到这里是不是突然灵光一闪,小米的面试题有思路了,接下来我们试着做一下:
1.首先我们将输入的字符串(split不带参数)以空格作为分隔符切片字符串——【input().split()】
2.然后【::-1】倒序——【input().split()[::-1]】
3.再把上述结果以空格为分隔符,返回切片后的子字符串拼接的列表——【’ '.join((input().split()[::-1]))】
4.print输出
最后一练:
输入
They are students.
aeiou
输出
Thy r stdnts.
提示:输出结果相当于第一个字符串减去了第二个字符串