我遇到了我认为是一个错误,我正在寻找确认或我不理解这种方法是如何工作的。
这是我的基本输出:
(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',但事实并非如此。有谁知道为什么?
答案 0 :(得分:8)
lstrip()
函数的行为方式与您的想法完全不同。 x.lstrip(argument)
从字符串argument
的左侧删除x
中的所有字符,直到它到达argument
以外的字符。
所以'KEY_K'.lstrip('KEY_')
生成''
,因为最后一个字符K
位于KEY_
。
答案 1 :(得分:5)
在文档中是正确的:
lstrip(...) S.lstrip([chars]) - >字符串或unicode
返回字符串S的副本,删除前导空格。 如果给出了chars而不是None,删除字符中的字符。 如果chars是unicode,则在剥离之前S将转换为unicode
'K'
位于'KEY_'
,这就是您的上一个示例返回''
的原因。
请注意,如果前面有不在'K'
的字符,则'KEY_'
不会被删除:
>>> 'KEY_xK'.lstrip('KEY_')
'xK'
答案 2 :(得分:5)
lstrip的第二个arg是将被删除的 set 字符。如果您需要删除子字符串,可以使用:
if x.startswith('KEY_'):
x = x.replace('KEY_', '', 1)