Python-字符串常用

目录

1.字符串的切片

2.去前导/后导空格(或指定字符)

3.字符串对齐

4.字符串拆分

5.列表/元组合并成字符串

6.大小写转换

7.字符串反转


 


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()函数进行连接以获取反转字符串

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值