目录
1.字符串的切片
格式:s[[begin] : [end] : [stride]]
其中:
begin 为开始截取序号(包含,缺省值 = 0);
end 为结束截取序号(不包含,缺省值 = len(s) / -1);
stride 为截取步长(不能为 0,缺省值 = 1)
例:
# coding=utf-8
s = '0123456789'
print(s[1:9])
# 输出为 '12345678'
print(s[1:9:2])
# 输出为 '1357'
print(s[:])
# 输出为 '0123456789'
print(s[0:len(s)])
# 输出为 '0123456789'
上面为 stride > 0 的常见情况:从 begin 开始,每次加上 stride,直到 end;
以下为个人见解,并未考证:
当 stride < 0 时,会将 begin,end 转化成对应负值序号然后同 stride > 0 时:从 begin 开始,每次加上 stride,直到 end;
# coding=utf-8
s = '0123456789'
print(s[-1:-11:-1])
# 输出为 '9876543210'
print(s[0:len(s):-1])
# 输出为 ''
print(s[::-1]) # stride < 0 时,begin 和 end 的缺省值已经改变
# 输出为 '9876543210'
print(s[::-2])
# 输出为 '97531'
由此,按着自己的思路实现以下函数:
# coding=utf-8
def my_split(s, begin=None, end=None, stride=1):
ret = '' # 返回值变量
length = len(s)
if stride == 0: # stride = 0
raise ValueError('slice step cannot be zero')
elif stride > 0: # stride > 0
# 将 begin,end 调整为非负数
_begin = 0 if begin is None else begin
if begin < 0:
_begin = begin + length
_end = len(s) if end is None else end
if end < 0:
_end = end + length
# 获取返回值
while _begin < _end:
ret += s[_begin]
_begin += stride
else: # stride < 0
# 将 begin,end 调整为非正数
_begin = -1 if begin is None else begin
if begin > 0:
_begin = begin - length
_end = -1 - len(s) if end is None else end
if end > 0:
_end = end - length
# 获取返回值
while _begin > _end:
ret += s[_begin]
_begin += stride
return ret
2.去前导/后导空格(或指定字符)
格式:str.strip([char]) ,不传参数默认为空格
s = ' abcde '
print(s.strip())
# 输出为 'abcde'
print(s.lstrip())
# 输出为 'abcde '
print(s.rstrip())
# 输出为 ' abcde'
s = '###abcde####'
print(s.strip('#'))
# 输出为 'abcde'
print(s.lstrip('#'))
# 输出为 'abcde####'
print(s.rstrip('#'))
# 输出为 '###abcde'
3.字符串对齐
格式1:str.center(width[, fillchar]) || str.ljust(width[, fillchar]) || str.rjust(width[, fillchar])
对齐格式依次为:居中对齐、右对齐、左对齐,fillchar 默认为空格
s = '12345'
print(s.center(10))
# 输出为 ' 12345 '
print(s.center(10, '*'))
# 输出为 '**12345***'
print(s.ljust(10))
# 输出为 '12345 '
print(s.ljust(10, '*'))
# 输出为 '12345*****'
print(s.rjust(10))
# 输出为 ' 12345'
print(s.rjust(10, '*'))
# 输出为 '*****12345'
格式2:'{{str} : [fillchar] < || ^ || > {len}}'.format(str=需对齐字符串,len=对齐长度)
其中,< 为左对齐,^ 为居中对齐, > 为右对齐,fillchar 默认为空格
s = '12345'
length = 10
print('{:^10}'.format(s))
# 输出为 ' 12345 '
print('{:*^10}'.format(s))
# 输出为 '**12345***'
print('{:@^{}}'.format(s, length))
# 输出为 '@@12345@@@'
print('{:{}^{}}'.format(s, '#', length))
# 输出为 '##12345###'
print('{str:{fillchar}^{len}}'.format(str=s, fillchar='&', len=length))
# 输出为 '&&12345&&&'
print('{:<10}'.format(s))
# 输出为 '12345 '
print('{:*<10}'.format(s))
# 输出为 '12345*****'
print('{:@<{}}'.format(s, length))
# 输出为 '12345@@@@@'
print('{:{}<{}}'.format(s, '#', length))
# 输出为 '12345#####'
print('{str:{fillchar}<{len}}'.format(str=s, fillchar='&', len=length))
# 输出为 '12345&&&&&'
print('{:>10}'.format(s))
# 输出为 ' 12345'
print('{:*>10}'.format(s))
# 输出为 '*****12345'
print('{:@>{}}'.format(s, length))
# 输出为 '@@@@@12345'
print('{:{}>{}}'.format(s, '#', length))
# 输出为 '#####12345'
print('{str:{fillchar}>{len}}'.format(str=s, fillchar='&', len=length))
# 输出为 '&&&&&12345'
Tips:'{ : [fillchar] [len] . {保留小数点后位数} f }' .format() 也可以用来对浮点数进行格式化
1.会四舍五入
2.长度 len 包含小数点及小数点后位数
print('{:2.4f}'.format(5.55555))
# 输出为 '5.5556'
print('{:20.4f}'.format(5.55555))
# 输出为 ' 5.5556'
print('{:020.4f}'.format(5.55555))
# 输出为 '000000000000005.5556'
4.字符串拆分
str.split(sep_str[, count])
将 str 按 sep_str 拆分 count 次,返回一个列表,列表中不包含已拆分的 sep_str
s = 'Apple, Banana, Orange'
l = s.split(', ')
print(l) # ['Apple', 'Banana', 'Orange']
l = s.split(', ', 1)
print(l) # ['Apple', 'Banana, Orange']
str.partition(sep_str)
从 str 左侧开始查找第一个 sep_str,并拆分,返回一个三元元组,列表中包含已拆分的 sep_str;
当 str 不包含 sep_str 返回 (str, '', '')
s = 'Apple@@@Banana@@@Orange'
l = s.partition('@@@')
print(l) # ('Apple', '@@@', 'Banana@@@Orange')
l = s.partition('abc')
print(l) # ('Apple@@@Banana@@@Orange', '', '')
str.rpartition(sep_str)
从 str 右侧开始查找第一个 sep_str,并拆分,返回一个三元元组,列表中包含已拆分的 sep_str;
当 str 不包含 sep_str 返回 ('', '', str)
s = 'Apple@@@Banana@@@Orange'
l = s.rpartition('@@@')
print(l) # ('Apple@@@Banana', '@@@', 'Orange')
l = s.rpartition('abc')
print(l) # ('', '', 'Apple@@@Banana@@@Orange')
5.列表/元组合并成字符串
格式:str.join([list] / (tuple))
其中 str 为连接符,list 和 tuple 中的元素必须为字符或字符串
s = '@@'
l = ['a', 'b', 'c', 'd', 'e']
print(s.join(l))
# 输出为 'a@@b@@c@@d@@e'
print('$'.join(l))
# 输出为 'a$b$c$d$e'
Tips:str1.join(str2) 会将字符串 str2 中每两个字符间插入一个 str1
6.大小写转换
将字符串全大写:str.upper()
将字符串全小写:str.lower()
将字符串每个单词首字母大写:str.title()
将字符串大小写转换:str.swapcase()
将字符串首字符大写:str.capitalize()
s = 'Hello, My name is John!'
print(s.upper())
# 输出为 'HELLO, MY NAME IS JOHN!'
print(s.lower())
# 输出为 'hello, my name is john!'
print(s.title())
# 输出为 'Hello, My Name Is John!'
print(s.swapcase())
# 输出为 'hELLO, mY NAME IS jOHN!'
print(s.capitalize())
# 输出为 'Hello, my name is john!'
7.字符串反转
第一种:
用切片的方法:s[: : -1];
第二种:
使用函数 reversed()
返回值是一个迭代器对象,官方文档如下:
reversed(sequence) -> reverse iterator over values of the sequence
Return a reverse iterator
故其使用格式为:''.join(reversed(str))
使用join()函数进行连接以获取反转字符串