Tengo un conjunto de cadenas set1
, y todas las cadenas set1
tienen dos subcadenas específicas que no necesito y quiero eliminar.
Entrada de muestra:
set1={'Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad'}
Entonces, básicamente, quiero eliminar las subcadenas .good
y .bad
de todas las cadenas.
Lo que probé:
for x in set1:
x.replace('.good','')
x.replace('.bad','')
Pero esto no parece funcionar en absoluto. No hay absolutamente ningún cambio en la salida y es lo mismo que la entrada. Intenté usar en for x in list(set1)
lugar del original, pero eso no cambia nada.
fuente
string.replace()
está en desuso en python 3.x, ahora lo estástr.replace()
.replace
no cambia la cadena, devuelve una copia de la cadena con el reemplazo. No puede cambiar la cadena directamente porque las cadenas son inmutables.Debe tomar los valores de retorno
x.replace
y colocarlos en un nuevo conjunto.fuente
¡Todo lo que necesitas es un poco de magia negra!
fuente
Podrías hacer esto:
fuente
x.replace('.good',' ')
yx.replace('.bad',' ')
no hace nada al resultado final. La impresión será la misma sin ellos.re.sub
, como esta:x = re.sub('((\.good$)|(\.bad$))', '', x)
replace
sy mueva todo a una solare.sub
llamada)Hice la prueba (pero no es su ejemplo) y los datos no los devuelven de manera ordenada o completa
Probé que esto funciona:
o
fuente
Cuando hay varias subcadenas para eliminar, una opción simple y efectiva es usar
re.sub
un patrón compilado que implique unir todas las subcadenas para eliminar utilizando la|
tubería regex OR ( ).fuente
Si la lista
Estaba haciendo algo para una lista que es un conjunto de cadenas y desea eliminar todas las líneas que tienen una cierta subcadena, puede hacer esto
donde
sub
hay un patrón que no desea tener en una lista de líneasLinSplitUnOr
por ejemplo
Entonces
A
seráfuente
si elimina algo de la lista, puede usarlo de esta manera: (el método sub distingue entre mayúsculas y minúsculas)
fuente