减法运算符python

时间:2011-11-17 13:51:23

标签: python

我想减少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.如果不能这样做,那么有更简单的方法执行此操作吗?

6 个答案:

答案 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])