Quiero sustituir cada carácter que no es «yo» en la cadena «aeiou» con un «!»

Escribí:

def changeWord(word):
    for letter in word:
        if letter != "i":
            word.replace(letter,"!")
    return word

Esto sólo devuelve el original. ¿Cómo puedo volver «!!yo!!»?

OriginalEl autor Aei | 2012-11-18

5 Comentarios

  1. 5

    Las cadenas en Python son inmutables, por lo que no puede cambiar en su lugar. Retirar el documentación de str.reemplazar:

    Devolver una copia de la cadena con todas las apariciones de la subcadena de edad reemplazados por los nuevos. Si el
    el argumento opcional recuento es dada, solo el primer recuento de las ocurrencias son reemplazados.

    Para hacer el trabajo, hacer esto:

    def changeWord(word):
        for letter in word:
            if letter != "i":
                word = word.replace(letter,"!")
        return word
    Ah, ya veo. Debe he dado cuenta de que. Gracias!
    Mientras que esto va a funcionar, es el peor de los casos O(len(word)^2). Algo así como ''.join('!' if c != 'i' else c for c in word) sería más eficiente para cadenas largas.
    Esta es una operación O(n^2) algoritmo… no Es malo, solo es ineficiente

    OriginalEl autor JoelWilson

  2. 4

    Las expresiones regulares son muy potentes para este tipo de cosas. Esto sustituye a cualquier carácter que no es un «yo» con «!»

    import re
    str = "aieou"
    print re.sub('[^i]', '!', str)

    devuelve:

    !!i!!

    OriginalEl autor Rachel Sanders

  3. 3

    algo como esto utilizando split() y join():

    In [4]: strs="aeiou"
    
    In [5]: "i".join("!"*len(x) for x in strs.split("i"))
    Out[5]: '!!i!!'
    Ja, que es bastante dulce.

    OriginalEl autor Ashwini Chaudhary

  4. 3

    Probar este, como un one-liner:

    def changeWord(word):
        return ''.join(c if c == 'i' else '!' for c in word)

    La respuesta debe ser concisa expresa con el uso de un generador, no hay necesidad de utilizar expresiones regulares o bucles en este caso.

    OriginalEl autor Óscar López

  5. 2

    Nadie parece dar amor a str.traducir:

    In [25]: chars = "!"*105 + 'i' + "!"*150
    
    In [26]: 'aeiou'.translate(chars)
    Out[26]: '!!i!!'

    Espero que esto ayude

    +1 – soy un tonto para traducir 🙂
    Debo admitir sin embargo, que esto sería ineficiente para las pequeñas traducciones en pequeñas entradas. Funciona aquí para evitar str.join y porque hay un MONTÓN de traducción 🙂
    Jaja, bueno, lo es todavía un fresco de una solución – estoy seguro de que alguien va a estar fuera de él.

    OriginalEl autor inspectorG4dget

Dejar respuesta

Please enter your comment!
Please enter your name here