web-dev-qa-db-fra.com

Comment puis-je soustraire deux chaînes en python?

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.

18
max smith

vous pouvez aussi faire

print "lamp, bag, mirror".replace("bag,","")
32
Joran Beasley

Que dis-tu de ça?:

def substract(a, b):                              
    return "".join(a.rsplit(b))
20
Zaka Elab

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"
11
Óscar López
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. 
1
Dengs

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)
1
dare

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

1
Rohan Amrute

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"
0
J. Doe

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)
0
badc0re