Quiero el “.good” y “.bad” subcadenas eliminadas de todas las cadenas. Intenté esto:
for x in set1:
x.replace('.good', '')
x.replace('.bad', '')
pero parece que no funciona, set1 queda exactamente igual. Traté de usar for x in list(set1) en cambio, pero eso no cambia nada.
Reut Sharabani
Las cadenas son inmutables. str.replace crea un nuevo cuerda. Esto se indica en la documentación:
str.replace(old, new[, count])
devolver un Copiar de la cadena con todas las apariciones de subcadena antiguo reemplazado por nuevo. […]
Esto significa que debe reasignar el conjunto o volver a llenarlo (la reasignación es más fácil con un establecer la comprensión):
new_set = {x.replace('.good', '').replace('.bad', '') for x in set1}
PD: si desea cambiar el prefijo o el sufijo de una cadena y está utilizando Pitón 3.9 o más reciente, use str.removeprefix() o str.removesuffix() en cambio:
new_set = {x.removesuffix('.good').removesuffix('.bad') for x in set1}
Nota: También funciona con una lista, simplemente use [...] en vez de {...}
– Mo711
25 de abril de 2021 a las 14:56
¿Cuál es el punto de editar esta pregunta para actualizarla con str.removesuffix() para Python 3.9+ copiando la respuesta de @DineshKumar? Es más justo dejar que la gente acredite al autor de esa respuesta.
– Divenex
28 de junio a las 8:59
@divenex Volvería a editar y enlazaría a la respuesta de Dinesh en lugar de copiarla. Creo que es legítimo porque vive en la misma página, por lo que no es como un enlace que en realidad puede caducar fácilmente.
– Reut Sharabani
28 de junio a las 18:25
>>> x = 'Pear.good'
>>> y = x.replace('.good','')
>>> y
'Pear'
>>> x
'Pear.good'
.replace no cambio 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 de x.replace y ponerlos en un nuevo conjunto.
Pero cuando recorro el conjunto de cadenas, ¿cómo puedo actualizar un nuevo conjunto? usando set_name.update? ¿Podrías mostrar eso?
– dominante
22 de mayo de 2016 a las 9:39
DineshKumar
En Pitón 3.9+ podrías eliminar el sufijo usando str.removesuffix('mysuffix'). De los documentos:
Si la cadena termina con el sufijo cuerda y eso sufijo no está vacío, vuelve string[:-len(suffix)]. De lo contrario, devuelve una copia de la cadena original.
Entonces puede crear un nuevo conjunto vacío y agregar cada elemento sin el sufijo:
set1 = {'Apple.good', 'Orange.good', 'Pear.bad', 'Pear.good', 'Banana.bad', 'Potato.bad'}
set2 = set()
for s in set1:
set2.add(s.removesuffix(".good").removesuffix(".bad"))
O crea el nuevo conjunto usando una comprensión de conjunto:
set2 = {s.removesuffix(".good").removesuffix(".bad") for s in set1}
print(set2)
Producción:
{'Orange', 'Pear', 'Apple', 'Banana', 'Potato'}
¡Todo lo que necesitas es un poco de magia negra!
>>> a = ["cherry.bad","pear.good", "apple.good"]
>>> a = list(map(lambda x: x.replace('.good','').replace('.bad',''),a))
>>> a
['cherry', 'pear', 'apple']
cs95
Cuando hay varias subcadenas para eliminar, una opción simple y efectiva es usar re.sub con un patrón compilado que implica unir todas las subcadenas para eliminar usando la expresión regular OR (|) tubería.
import re
to_remove = ['.good', '.bad']
strings = ['Apple.good','Orange.good','Pear.bad']
p = re.compile('|'.join(map(re.escape, to_remove))) # escape to handle metachars
[p.sub('', s) for s in strings]
# ['Apple', 'Orange', 'Pear']
Vivek
Podrías hacer esto:
import re
import string
set1={'Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad'}
for x in set1:
x.replace('.good',' ')
x.replace('.bad',' ')
x = re.sub('\.good$', '', x)
x = re.sub('\.bad$', '', x)
print(x)
Amín
# practices 2
str = "Amin Is A Good Programmer"
new_set = str.replace('Good', '')
print(new_set)
print : Amin Is A Programmer
Hola Amin. Si bien este código puede responder a la pregunta, proporcionar contexto adicional sobre por qué y/o cómo este código responde a la pregunta mejora su valor a largo plazo. Cómo responder. Saludos cordiales.
– Elletlar
13 de noviembre de 2020 a las 11:26
Hola amigo, este código funciona con otros textos largos. así que incluso puede obtener su cadena de la entrada y encontrar el punto de texto …
– Amín
13 de noviembre de 2020 a las 12:10
Es una muy mala práctica cambiar el nombre de componentes como str.
– Chris Collett
1 abr 2021 a las 17:32
eso no es un conjunto.
– Boris Verjovskiy
15 abr 2021 a las 23:16
por qué eso no está establecido, pero sé que es cierto. Entonces, ¿cuál es tu problema en este código?
– Amín
16 de abril de 2021 a las 1:02
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información