2013-08-26 53 views
10

Ho una lunga stringa, che è fondamentalmente una lista come str="lamp, bag, mirror," (e altri oggetti)Come posso sottrarre due stringhe in python?

Mi chiedevo se posso aggiungere o sottrarre alcune voci, in altri linguaggi di programmazione posso facilmente fare: str=str-"bag," e ottenere str="lamp, mirror," questo non funziona in python (sto usando 2.7 su un pc W8)

C'è un modo per dividere la stringa attraverso dire "borsa" e in qualche modo usarla come sottrazione? Poi ho ancora bisogno di capire come aggiungere.

+1

Quando si dice "sottrazione", intendi rimuovere un elemento dall'elenco o rimuovere gli ultimi caratteri se corrispondono (e se non lo fanno, quale dovrebbe essere il comportamento? Che dire dei valori duplicati? –

+1

Dai un'occhiata a stringa replace: http://docs.python.org/2/library/string.html#string.replace – kevmo314

+10

'in altri linguaggi di programmazione posso facilmente fare: str = str-" bag ", e ottenere str = "lamp, mirror," 'quali lingue? –

risposta

10

È possibile farlo fino a quando si utilizzano ben formato liste:

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

Se la lista non è ben formato, si può fare come segue, come suggerito da @Lattyware:

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

Ora per eliminare l'elemento:

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

In entrambi i casi - per ricostruire la stringa, utilizzare join():

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

Un approccio diverso sarebbe quello di utilizzare replace() - ma attenzione con la stringa che si desidera sostituire, ad esempio "mirror" non ha un finale , alla fine.

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

Potrebbe essere utile menzionare 'str.split()'. –

+0

Sì, stavo per farlo :) –

+2

Ovviamente, qui si presuppone che l'elenco sia ben formato con spazi dopo ogni elemento, se questo non è il caso, il '[item.strip() per l'elemento in s0.split (',')] 'è più flessibile (una semplice [list comprehension] (http://www.youtube.com/watch?v=pShL9DCSIUw) con [' str.strip() '] (http : //docs.python.org/3/library/stdtypes.html#str.strip) metodo). –

1

si dovrebbe convertire la stringa in un elenco di stringa quindi fare ciò che si desidera. guarda

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

Io uso solo il nome della variabile – dare

19

si potrebbe anche solo fare

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

Naturalmente, questo funziona in modo diverso rispetto ad altri esempi nel caso di duplicati - l'OP non fornisce alcuna spiegazione del comportamento richiesto in quel caso, ma vale la pena annotarlo. –

+1

buon punto ... in realtà la spaccatura è probabilmente la risposta "corretta", tuttavia ho pensato di buttarla lì. non so quali lingue supportino la sottrazione di stringhe o come si comporterebbe in tali lingue. –

0

Utilizzando regolare esempio espressione:

import re 

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

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

Massive overkill per questa attività. Perché usare REs quando 'str.split()' fa esattamente ciò che si desidera? –

+0

È solo un esempio come ho detto. – badc0re

12

ne dite di questo ?:

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

Questa soluzione è abbastanza elegante. – fralau

1

Se si dispone di due stringhe come sotto:

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

e si vuole sottrarre questi due stringhe quindi è possibile utilizzare il codice qui sotto:

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 

uscita sarà come:

sono te è lui

0

Utilizzando quanto segue è possibile aggiungere più parole da rimuovere (["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" 
Problemi correlati