Tengo un conjunto de cadenas set1, y todas las cadenas set1tienen 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 .goody .badde 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().replaceno 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.replacey 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)replacesy mueva todo a una solare.subllamada)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.subun 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
subhay un patrón que no desea tener en una lista de líneasLinSplitUnOrpor ejemplo
Entonces
Aseráfuente
si elimina algo de la lista, puede usarlo de esta manera: (el método sub distingue entre mayúsculas y minúsculas)
fuente