【问题标题】:Understanding python's lstrip method on strings [duplicate]了解python对字符串的lstrip方法[重复]
【发布时间】:2016-04-05 07:07:48
【问题描述】:

我遇到了一个我认为是错误的问题,我正在寻找确认,或者我不了解此方法的工作原理。

这是我的基本输出:

(Pdb) x = 'KEY_K'
(Pdb) x.lstrip('K')
'EY_K'
(Pdb) x.lstrip('KE')
'Y_K'
(Pdb) x.lstrip('KEY')
'_K'
(Pdb) x.lstrip('KEY_')
''
(Pdb) import sys
(Pdb) sys.version
'2.7.11 (default, Dec  5 2015, 14:44:47) \n[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)]'

我的理解是,该示例中的最后一个“lstrip”应该返回“K”,但它没有。有谁知道为什么?

【问题讨论】:

    标签: python string methods


    【解决方案1】:

    lstrip() 函数的行为与您想象的完全不同。 x.lstrip(argument) 从字符串x 的左侧删除argument 中的任何字符,直到它到达不在argument 中的字符。

    所以'KEY_K'.lstrip('KEY_') 生成'',因为最后一个字符KKEY_ 中。

    【讨论】:

    • 我觉得这也是一个很好的答案,但我只能选择一个。
    • 哈,说实话我觉得你的选择是对的!
    【解决方案2】:

    在文档中是正确的:

    lstrip(...) S.lstrip([chars]) -> 字符串或 unicode

    返回删除前导空格的字符串 S 的副本。 如果给出 chars 而不是 None,删除 chars 中的字符。 如果 chars 是 unicode,S 会在剥离前转换为 unicode

    'K''KEY_' 中,这就是您的最后一个示例返回'' 的原因。

    请注意,如果'K' 前面有一个不在'KEY_' 中的字符,则不会被删除:

    >>> 'KEY_xK'.lstrip('KEY_')
    'xK'
    

    【讨论】:

      【解决方案3】:

      lstrip 的第二个参数是set 将被删除的字符。如果需要删除子字符串,可以使用:

      if x.startswith('KEY_'):
          x = x.replace('KEY_', '', 1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-23
        • 2017-09-17
        • 2019-01-03
        • 2021-12-07
        • 2012-10-19
        相关资源
        最近更新 更多