专栏首页Small Code有意思的 lstrip 和 removeprefix(Python 3.9)

有意思的 lstrip 和 removeprefix(Python 3.9)

废话不多说,上正文。

对比

Python 3.9 的新特性中,有两个新的字符串方法:str.removeprefix(prefix, /)str.removesuffix(suffix, /),前者是去除前缀,后者是去除后缀。

ěi~,是不是感觉似曾相识,这不就是 lstrip()rstrip() 的功能吗?还真不是。

来看一个对比:

>>> '今天天气不错'.removeprefix('今天')
'天气不错'
>>> '今天天气不错'.lstrip('今天')
'气不错'

?是不是挺奇怪,我估计可能坑了很多人。下面来看下为什么 lstrip() 会出现这样的结果。

Why

首先需要说明的是,lstrip([chars]) 这样的行为,是一个 feature,不是一个 bug。

看下文档是怎么说的:

Return a copy of the string with leading characters removed. The chars argument is a string specifying the set of characters to be removed. The chars argument is not a prefix; rather, all combinations of its values are stripped:

也就是说,其参数 chars 虽然是一个字符串,但不是直接去除字串形式的 chars,而是在从左到右遍历原字符串,去除在 chars 中的字符,直到遇到第一个不在 cahrs 中的字符为止,即类似如下实现:

def lstrip(s, chars):
    chars = set(chars)
    for i in s:
        if i in chars:
            s = s.replace(i, '')
        else:
            break
    return s
>>> lstrip('今天天气不错', '今天')
'气不错'

有时候可能这并不是我们想要的情况(可能大多数情况都不是),我们想要的是可能是下面这样的效果:

def lstrip(s, chars):
    if s.startswith(chars):
        return s[len(chars):]
    return s
>>> lstrip('今天天气不错', '今天天气')
'天气不错'

而 Python 3.9,就直接内置了这个方法,命名为 removeprefix(),后面如果我们想要去除前缀而不是前缀所包括的那些字符的时候,就可以直接用了:

>>> '今天天气不错'.removeprefix('今天')
'天气不错'

Reference

END

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2017 Python 问卷调查结果初步分析

    2017 年末,PSF(Python Software Foundation,Python 软件基金会)和 JetBrains 一起进行了一次全球范围内的关于 ...

    Alan Lee
  • 【Python】Pandas的apply函数使用示例

    apply 是 pandas 库的一个很重要的函数,多和 groupby 函数一起用,也可以直接用于 DataFrame 和 Series 对象。主要用于数据聚...

    Alan Lee
  • Plotly 初步

    版权声明:本文为博主原创文章,未经授权禁止转载。 https://blog.csdn.net/u0...

    Alan Lee
  • [Springboot]SpringCache + Redis实现数据缓存

    本文实现了SpringCache + Redis的集中式缓存,方便大家对学习了解缓存的使用。

    后端技术漫谈
  • [Springboot]SpringCache + Redis实现数据缓存

    本文实现了SpringCache + Redis的集中式缓存,方便大家对学习了解缓存的使用。

    Rude3Knife的公众号
  • ThinkPHP5.1 Linux下命名空间问题

    随手把大写的 “A" 改为 “a”,同时对应的调用方式改为 “use app\uniapi\model\XinApiData” ,然后就发现,神奇的解决了问题 ...

    泥豆芽儿 MT
  • LintCode-49. 字符大小写排序

    悠扬前奏
  • @RequestBody和@RequestParam区别

    注解@RequestParam接收的参数是来自requestHeader中,即请求头。

    chenchenchen
  • [Maven][maven-site-plugin]告警[WARNING] No project URL defined - decoration links will not be relativi

    执行mvn clean package site时报错[WARNING] No project URL defined - decoration links w...

    用户1221057
  • 2021年网络黑产市场恐比肩世界第三大经济体

    随着组织数字化,犯罪也随之数字化,地下犯罪产业正在前所未有地蓬勃发展。如今,网络犯罪已经成为一项庞大的业务,随着公司与消费者一同投入这个万亿美元的数字世界。

    FB客服

扫码关注云+社区

领取腾讯云代金券