Как вычесть две строки?

У меня длинная строка, которая в основном представляет собой список str="lamp, bag, mirror," (и другие элементы)

Мне было интересно, могу ли я добавить или вычесть некоторые элементы, на других языках программирования, которые я могу легко сделать: str=str-"bag," и получить str="lamp, mirror,", это не работает в python (я использую 2.7 на ПК W8)

Есть ли способ разделить строку через "сумку" и как-то использовать ее как вычитание? Затем мне еще нужно выяснить, как добавить.

Ответ 1

вы также можете просто сделать

print "lamp, bag, mirror".replace("bag,","")

Ответ 2

Как насчет этого?:

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

Ответ 3

Вы можете сделать это, если используете хорошо сформированные списки:

s0 = "lamp, bag, mirror"
s = s0.split(", ") # s is a list: ["lamp", "bag", "mirror"]

Если список не является корректным, вы можете сделать следующее, как предложено @Lattyware:

s = [item.strip() for item in s0.split(',')]

Теперь, чтобы удалить элемент:

s.remove("bag")
s
=> ["lamp", "mirror"]

В любом случае - для восстановления строки используйте join():

", ".join(s)
=> "lamp, mirror"

Другим подходом было бы использовать replace() - но будьте осторожны с строкой, которую вы хотите заменить, например "mirror" не имеет завершающего , в конце.

s0 = "lamp, bag, mirror"
s0.replace("bag, ", "")
=> "lamp, mirror"

Ответ 4

вы должны преобразовать свою строку в список строк, а затем делать то, что хотите. смотрите

my_list="lamp, bag, mirror".split(',')
my_list.remove('bag')
my_str = ",".join(my_list)

Ответ 5

Если у вас есть две строки, как показано ниже:

t1 = 'how are you'
t2 = 'How is he'

и вы хотите вычесть эти две строки, вы можете использовать приведенный ниже код:

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

Вывод будет выглядеть следующим образом:

ты, он,

Ответ 6

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. 

Ответ 7

Использование примера регулярного выражения:

import re

text = "lamp, bag, mirror"
word = "bag"

pattern = re.compile("[^\w]+")
result = pattern.split(text)
result.remove(word)
print ", ".join(result)

Ответ 8

Используя следующее, вы можете добавить больше слов для удаления (["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"