by.csdn Qin3Yu
1. 字符串的分割方法
- 字符串最常用的即为分割方法,在字符串后写一个
[]
,填入参数,即可分割字符串,其语法如下,将字符串s
的firstIndex
与lastIndex-1
区间内(即[firstIndex,lastIndex)
区间内)的字符串返回,step
为步长,可通俗理解为“每step
个取一个”,其中firstIndex
默认为0
,lastIndex
默认为len(s)
,step
默认为1
:
s2 = s1[firstIndex:lastIndex:step]
s3 = '0123456789'
s4 = s3[1:7:2]
# s4 = '135'
- 同时,
firstIndex
也可以大于lastIndex
,此时step
必须<0
且 不再默认 ,代表从后向前 反向分割 字符串:
s1 = '0123456789'
s2 = s1[7:2:-1]
# s2 = '76543'
firstIndex
与lastIndex
也可以为负数,称为字符串的 负索引 ,字符串最后一位的负索引为-1
,最前一位的负索引即为-len(s)
,同样也可用于分割字符串,此方法通常用于 获取不确定长度字符串的最后几位 :
s1 = '0123456789'
s2 = s1[-5:-2]
# s2 = '567'
- 利用
firstIndex
与lastIndex
的默认值,我们可以快速地 反转字符串 ,此方法非常常用:
s = s[::-1]
2. 字符串的常用方法
- 字符串有以下几种常用的方法,下表中用
s
代表字符串,c
代表其中字符,n
代表整型常量,lis
表示列表:
方法 | 说明 | 有返回 |
---|---|---|
len(s) | 返回 s 的长度 | ✓ |
s1.startswith(s2) | 判断 s1 是否以 s2 开头 | ✓ |
s1.endswith(s2) | 判断 s1 是否以 s2 结尾 | ✓ |
s.isdigit() | 判断 s 中的字符是否全为数字 | ✓ |
s.strip() | 移除 s 前后的所有空格并返回 | ✓ |
s.find(c) | 返回 s 中 c 的下标 | ✓ |
s.count(c) | 返回 s 中 c 的数量 | ✓ |
s.replace(c1, c2) | 将 s 中的所有 c1 替换为 c2 并返回 | ✓ |
- 以下几种方法虽不常见,但也偶尔会使用:
方法 | 说明 | 有返回 |
---|---|---|
s.upper() | 将 s 中的所有字母大写并返回 | ✓ |
s.lower() | 将 s 中的所有字母小写并返回 | ✓ |
s.rstrip(c) | 去除 s 末尾的所有 c 并返回,默认为空格 | ✓ |
s.index(c) | 返回 s 中 c 的下标 | ✓ |
s.join(lis) | 将 lis 中的元素以 s 相连后返回 | ✓ |
s.split(c) | 将 s 以 c 分割为列表并返回 | ✓ |
s.zfill(n) | 在 s 前填充 0 ,使长度为 n 并返回 | ✓ |
s.rjust(n,c) | 在 s 前填充 c ,使长度为 n 并返回,c 默认为空格 | ✓ |
s.ljust(n,c) | 在 s 后填充 c ,使长度为 n 并返回,c 默认为空格 | ✓ |
s.center(n,c) | 在 s 前后填充 c ,使长度为 n 并返回,c 默认为空格 | ✓ |
特别说明: .find()
方法与 .index()
的区别在于前者如果没有找到指定字符则会返回 -1
,而后者则会引发 ValueError
异常。
3. 常见字符集
- 字符集可以看作是一种常量字符串,诣在 简化代码 ,增强可读性,
string
模块中有以下8个常见的字符集,其中前3个最为常用:
字符集 | 说明 | 包含字符 |
---|---|---|
string.digits | 包含所有数字 | 0123456789 |
string.ascii_lowercase | 包含所有小写字母 | abc...xyz |
string.ascii_uppercase | 包含所有大写字母 | ABC...XYZ |
string.ascii_letters | 包含所有字母 | abc...XYZ |
string.hexdigits | 包含所有数字和字母 | 012...abc...DEF |
string.octdigits | 包含八进制字符 | 01234567 |
string.punctuation | 包含所有标点符号 | '!"#$%&\'()*+,-./:;<=>?@[\\]^_{|}~' |
string.whitespace | 包含所有空白字符 | \t\n\r\x0b\x0c |
特别说明: 使用前请先导入 string
模块。
4. 字符串的构造方法
- 字符串提供一个
str()
构造方法,其可接受几乎所有数据类型,并将其 转换为字符串 :
s = str(648)
# s = '648'
特别说明: 大多数人会认为可以使用 str()
方法将列表构造为字符串,实际上的输出可能会与预计产生偏差,这是因为 str()
会将值按照 print()
的 打印格式构造 为字符串,例如:
lis = ['A', 'B', 'C']
s = str(lis)
# s = '['A', 'B', 'C']'
- 所以在大多数情况下,我们通常使用
.join()
方法,使用空字符''
做连接,对列表做出转换:
lis = ['A', 'B', 'C']
s = ''.join(lis)
# s = 'ABC'
eval()
方法可以快速地将字符串转换为数值,其接受一个字符串s
,如果s
是 表达一个数值的字符串 ,则会返回 其表达的数值 ,否则会根据具体情况引发各种Error
异常,此方法非常常用:
s = '4+6+5*2+3'
n = eval(s)
# n = 23
5. 字符串格式化
- 字符串大多数时使用前导
f
和.format()
方法格式化,前者比后者更为常用。前导f
即在字符串前面添加一个字符f
,即可在字符串中使用{name}
来代替变量:
name = 'Asaka'
age = 18
s = f'I'm {name}, {age} years old.'
-
.format()
有很多用法,但是常见的只有以下三个。 -
在字符串中使用
{}
进行占位,每一个{}
将会对应.format()
中的每一个参数,依次填充 进字符串:
s = 'I'm {}, {} years old'.format(name, age)
- 也可以提前在字符串的
{}
中指定name
,在.format()
方法中将name
传入,则会 按变量名填充 进字符串,此时.format()
中的参数可以不按s
中的顺序输入:
s = 'I'm {name}, {age} years old'.format(age, name)
- 还可以在字符串的
{}
中填入下标形式的数字,此时则会将.format()
方法中的参数 按下标填充 进字符串,此方法常用于 一个参数要多次输入 的情况:
s = '{0}, {0}, {0}{0}{0},My hair is {1}'.format('hello', 'true')
6. 字符串特殊注意事项
-
在
Python
中,字符串是 不可变数据类型 ,如果使用下标修改字符串元素,则会引发TypeError
异常,如果需要修改字符串,通常的方法是先用list()
方法构造为列表,修改后再用.join()
方法构造为字符串。 -
对于拼接字符串,使用
+
效率将会比使用.join>()
方法效率低下,因此在拼接大量字符串时建议使用.join()
方法。
thanks
by.csdn Qin3Yu