使用strip()函数高效地处理元组

3

考虑一个基本的元组,它与内置方法str.startswith()一起使用:

>>> t = 'x','y','z'
>>> s = 'x marks the spot'
>>> s.startswith( t )
True

当使用带有 str.strip() 的元组时,需要使用循环:

>>> for i in t: s.strip(i)
... 
' marks the spot'
'x marks the spot'
'x marks the spot'

这似乎有些浪费;在使用 str.strip() 与元组项时,是否有更有效的方法?s.strip(t) 看起来很合理,然而不行。

1个回答

7

从字符串中提取子串与测试字符串是否以给定文本开头是非常不同的用例,因此这些方法在处理其输入时有很大的区别。

str.strip() 接受一个字符串作为参数,该字符串被视为一个字符 ;该字符串将被去除集合中的每个字符;只要字符串以集合中的成员字符开头或结尾,就会删除该起始或结束字符,直到起始和结束都不包含任何给定集合中的字符。

如果你有一个元组,请将其连接成一个字符串:

s.strip(''.join(t))

或者将其作为字符串字面量传递:

s.strip('xyz')

请注意,这意味着与使用str.strip()处理每个元组元素的方法有所不同!
比较:
>>> s = 'yxz_middle_zxy'
>>> for t in ('x', 'y', 'z'):
...     print(s.strip(t))
... 
yxz_middle_zxy
xz_middle_zx
yxz_middle_zxy
>>> print(s.strip('xyz'))
_middle_

即使你用单个字符链接`str.strip()`,它仍然不能产生相同的输出,因为`str.strip()`调用:
>>> for t in ('x', 'y', 'z'):
...     s = s.strip(t)
... 
>>> print(s)
xz_middle_zx

因为在去除这些字符时,字符串从未以xz开头或结尾;x只因在下一步骤中去除了y字符而出现在开头和结尾。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接