J'ai une longue chaîne, qui est essentiellement une liste comme str="lamp, bag, mirror,"
(et d'autres éléments)
Je me demandais si je pouvais ajouter ou soustraire certains éléments. Dans d'autres langages de programmation, je peux facilement faire: str=str-"bag,"
et obtenir str="lamp, mirror,"
ceci ne fonctionne pas en python (j'utilise 2.7 sur un PC W8)
Y a-t-il un moyen de fendre la chaîne en disant "sac" et de l'utiliser d'une manière ou d'une autre comme soustraction? Ensuite, je dois encore comprendre comment ajouter.
vous pouvez aussi faire
print "lamp, bag, mirror".replace("bag,","")
Que dis-tu de ça?:
def substract(a, b):
return "".join(a.rsplit(b))
Vous pouvez le faire tant que vous utilisez des listes bien formées:
s0 = "lamp, bag, mirror"
s = s0.split(", ") # s is a list: ["lamp", "bag", "mirror"]
Si la liste n'est pas bien formée, procédez comme suit, comme suggéré par @Lattyware:
s = [item.strip() for item in s0.split(',')]
Maintenant, supprimez l'élément:
s.remove("bag")
s
=> ["lamp", "mirror"]
Dans les deux cas - pour reconstruire la chaîne, utilisez join()
:
", ".join(s)
=> "lamp, mirror"
Une approche différente consisterait à utiliser replace()
- mais soyez prudent avec la chaîne que vous souhaitez remplacer, par exemple "mirror"
n'a pas de ,
final à la fin.
s0 = "lamp, bag, mirror"
s0.replace("bag, ", "")
=> "lamp, mirror"
from re import sub
def Str2MinusStr1 (str1, str2, n=1) :
return sub(r'%s' % (str2), '', str1, n)
Str2MinusStr1 ('aabbaa', 'a')
# result 'abbaa'
Str2MinusStr1 ('aabbaa', 'ab')
# result 'abaa'
Str2MinusStr1 ('aabbaa', 'a', 0)
# result 'bb'
# n = number of occurences.
# 0 means all, else means n of occurences.
# str2 can be any regular expression.
vous devriez convertir votre chaîne en une liste de chaînes puis faire ce que vous voulez. Regardez
my_list="lamp, bag, mirror".split(',')
my_list.remove('bag')
my_str = ",".join(my_list)
Si vous avez deux chaînes comme ci-dessous:
t1 = 'how are you'
t2 = 'How is he'
et que vous voulez soustraire ces deux chaînes, vous pouvez utiliser le code ci-dessous:
l1 = t1.lower().split()
l2 = t2.lower().split()
s1 = ""
s2 = ""
for i in l1:
if i not in l2:
s1 = s1 + " " + i
for j in l2:
if j not in l1:
s2 = s2 + " " + j
new = s1 + " " + s2
print new
La sortie sera comme:
es-tu est-il
En utilisant ce qui suit vous pouvez ajouter plus de mots à enlever (["bag", "mirror", ...]
)
(s0, to_remove) = ("lamp, bag, mirror", ["bag"])
s0 = ", ".join([x for x in s0.split(", ") if x not in to_remove])
=> "lamp, mirror"
Utilisation d'un exemple d'expression régulière:
import re
text = "lamp, bag, mirror"
Word = "bag"
pattern = re.compile("[^\w]+")
result = pattern.split(text)
result.remove(Word)
print ", ".join(result)