Je veux réduire le nombre de "les" mots de a par 2. Mais ce code ne semble pas fonctionner. Je ne peux pas comprendre pourquoi l'opérateur de multiplication fonctionne mais pas l'opérateur de soustraction.
b = "the"
a = b * 5
print a
a -= (b * 2)
print a
Production
the
the the the the the
Traceback (most recent call last):
a -= (b * 2)
TypeError: unsupported operand type(s) for -=: 'str' and 'str'
Comment puis-je réduire le nombre de "the" dans un par 2. Si cela ne peut pas être fait ainsi, y a-t-il une méthode plus simple pour le faire?
6 réponses
Pour réduire le nombre de "the" de 2 dans votre mot, essayez avec le remplacer:
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"
Si vous souhaitez supprimer le "the" en commençant par la fin, utilisez 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"
Comme décrit ici, l'opérateur * est pris en charge par la chaîne (et les types unicode, list, tuple, bytearray, buffer, xrange), b * 5
renvoie 5 copies de b concaténées.
Il n'y a pas de support pour l'opérateur de soustraction en cas de chaînes, mais vous pouvez simplement en ajouter un:
>>> 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
Et cela fonctionnera de la manière suivante:
>>> a = MyStr('thethethethethe')
>>> b = a - 'the'
>>> a
'thethethethethe'
>>> b
'thethethethe'
>>> b = a - 2 * 'the'
>>> b
'thethethe'
En ce qui concerne l'opération a - 2 * 'the'
, vous devez savoir que ce n'est pas " supprimer deux fois 'la' chaîne d'un ", mais " supprimer le résultat de (2 fois 'le') d'un "(multipliez d'abord" the
"par 2
puis soustrayez de a
).
C'est bien ce que vous attendiez?
a = a.rpartition(b * 2)[0]
Devrait le faire, en coupant du côté droit. Si vous n'avez aucun exemple de 'thethe'
dans a
, il renverra la chaîne vide ''
. Cela ne fonctionnera pas si vous avez plusieurs 'the'
séparés par d'autres caractères. Pour cela, vous pouvez utiliser a.rpartition(b)[0]
deux fois. Si vous souhaitez couper à partir de la gauche, utilisez a.partition(b * 2)[2]
.
Pourquoi la soustraction ne fonctionne-t-elle pas? L'utilisation de l'addition et de la multiplication est une fonctionnalité pratique pour travailler avec des chaînes. La sémantique de soustraction (ou de division) str
s n'est pas définie pour Python, vous ne pouvez donc pas l'utiliser de cette façon.
Cela dépend si vous voulez les couper au début ou à la fin, vous pouvez utiliser des sous-ensembles de tableaux:
>>> a[2*len("the"):]
'thethethe'
>>> a[:-(2*len("the"))]
'thethethe'
b = "the"
a = b * 5
print a
a = a[:-2*len(b)]
print a
# returns: thethethe
Je ne soustrait pas (vous ne pouvez pas vraiment le faire avec des chaînes), je supprime deux fois la longueur de b
à la fin de a
, en ignorant sa valeur réelle.
L'opérateur Plus fonctionne parce que "+" concatène alors que moins n'opère pas sur les chaînes. Vous pouvez essayer quelque chose en utilisant une expression régulière, comme:
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])
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.