我想减少a中的“the”字数。但是这段代码似乎没有运行。我无法理解为什么乘法运算符有效,但减法运算符却没有。
b = "the"
a = b * 5
print a
a -= (b * 2)
print a
输出
the
the the the the the
Traceback (most recent call last):
a -= (b * 2)
TypeError: unsupported operand type(s) for -=: 'str' and 'str'
如何减少a中“the”的数量2.如果不能这样做,那么有更简单的方法执行此操作吗?
答案 0 :(得分:3)
b = "the"
a = b * 5
print a
a = a[:-2*len(b)]
print a
# returns: thethethe
我不是减法(你不能用字符串真正做到这一点),我从b
的末尾删除a
长度的两倍,忽略它的实际价值。
答案 1 :(得分:3)
要将单词中“the”的数量减少2,请尝试使用replace方法:
b = "the"
a = b * 5
print a
>>> "thethethethethe"
a = a.replace(b, "", 2) # or a.replace(b*2, "", 1) if you want to remove "thethe" from the string
print a
>>> "thethethe"
如果您想从最后开始删除“the”,请使用rsplit()
b = "the"
a = "theAtheBthethe"
a = "".join(a.rsplit("the", 2)) # or "".join(a.rsplit("thethe", 1)) if you want to remove "theth" of the string
print a
>>> "theAtheB"
作为described here,*运算符由字符串(以及unicode,list,tuple,bytearray,buffer,xrange类型)支持,b * 5
返回5个连接的b副本。
答案 2 :(得分:2)
如果你想在开始或结束时砍掉它们,你可以使用数组子集:
>>> a[2*len("the"):]
'thethethe'
>>> a[:-(2*len("the"))]
'thethethe'
答案 3 :(得分:2)
如果是字符串,则不支持减法运算符,但您只需添加一个:
>>> class MyStr(str):
def __init__(self, val):
return str.__init__(self, val)
def __sub__(self, other):
if self.count(other) > 0:
return self.replace(other, '', 1)
else:
return self
这将按以下方式工作:
>>> a = MyStr('thethethethethe')
>>> b = a - 'the'
>>> a
'thethethethethe'
>>> b
'thethethethe'
>>> b = a - 2 * 'the'
>>> b
'thethethe'
关于a - 2 * 'the'
操作,您应该知道这不是“从中移除两次''字符串',而是”删除结果(2次''' )来自“(the
首先乘以”2
“,然后从a
减去。
这是你所期望的吗?
答案 4 :(得分:1)
a = a.rpartition(b * 2)[0]
应该这样做,从右侧切割。如果'thethe'
中没有a
的任何示例,则会返回空字符串''
。如果您有多个由其他字符分隔的'the'
,则无效。为此,您可以使用a.rpartition(b)[0]
两次。如果您想从左侧切割,请使用a.partition(b * 2)[2]
。
为什么不减去工作?使用加法和乘法是使用字符串的便利功能。没有为Python定义减去(或除去)str
的语义,所以你不能这样使用它。
答案 5 :(得分:1)
加上运算符工作因为“+”连接而减号不对字符串进行操作。您可以使用正则表达式尝试某些内容,例如:
import re
s="the"*5
expr="the"
print s
# s -= 2
print "".join(re.findall(expr,s)[:-2])
# s -=3
print "".join(re.findall(expr,s)[:-3])